2017-09-04 93 views
0

我正在尝试更新所有表,特效和视图的特定模式;但是,我收到一个权限错误,我尝试了一切。如何批量更新SQL模式

有人可以帮助显示正确的方式来设置下面的查询的权限,不会收到下面的错误。

查询

USE CAD 

DECLARE @OldSchema VARCHAR(200) 
DECLARE @NewSchema VARCHAR(200) 
DECLARE @SQL nvarchar(4000) 
SET @OldSchema = 'Storefront' 
SET @NewSchema = 'CadType' 

DECLARE tableCursor CURSOR FAST_FORWARD FOR 
    SELECT 'ALTER SCHEMA ['+ @OldSchema +'] TRANSFER [' + @NewSchema + '].[' + DbObjects.Name + '];' AS Cmd 
    FROM sys.Objects DbObjects 
    INNER JOIN sys.Schemas SysSchemas ON DbObjects.schema_id = SysSchemas.schema_id 
    WHERE SysSchemas.Name = @OldSchema 
    AND (DbObjects.Type IN ('U', 'P', 'V')) 
OPEN tableCursor 
FETCH NEXT FROM tableCursor INTO @SQL 
WHILE @@FETCH_STATUS = 0 
BEGIN 
    PRINT @SQL 
    EXEC (@SQL) 
    FETCH NEXT FROM tableCursor INTO @SQL 
END 
CLOSE tableCursor 
DEALLOCATE tableCursor 
PRINT '*** Finished ***' 

ERROR

ALTER SCHEMA [Storefront] TRANSFER [CadType].[proc_UpdateVertical]; 
Msg 15151, Level 16, State 1, Line 1 
Cannot find the object 'proc_UpdateVertical', because it does not exist or you do not have permission. 
ALTER SCHEMA [Storefront] TRANSFER [CadType].[proc_UpdateElevationQty]; 
Msg 15151, Level 16, State 1, Line 1 
Cannot find the object 'proc_UpdateElevationQty', because it does not exist or you do not have permission. 
ALTER SCHEMA [Storefront] TRANSFER [CadType].[proc_Update_Set_LeafIsActive]; 
Msg 15151, Level 16, State 1, Line 1 

回答

1

https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-schema-transact-sql

ALTER SCHEMA SCHEMA_NAME TRANSFER [ENTITY_TYPE ::] securable_name [;]

参数

SCHEMA_NAME是当前数据库的模式,可保安全的将被移动的名称。不能是SYS或 INFORMATION_SCHEMA。

securable_name是一个模式包含地固定到移动到架构中的一个部分或两部分名。

所以你需要

SELECT 'ALTER SCHEMA ['+ @NewSchema +'] TRANSFER [' + @OldSchema + '].[' + DbObjects.Name + '];' AS Cmd 
+0

很高兴我问这个问题,因为我的印象是,该模式是移动,这是不是这样的。它是正在转移的表格而不是图表。我的问题是,我还没有创建一个CadType架构,并将其设置为登录用户。几乎尴尬地承认这一点。 –