如何批量更新 SQL 模式
How to BULK UPDATE SQL Schemas
我正在尝试更新所有表、过程和视图的特定模式;但是,我收到了权限错误,我已经尝试了所有方法。
有人可以帮助显示为下面的查询设置权限的正确方法,以免收到下面的错误。
查询
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 ***'
错误
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
来自 https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-schema-transact-sql :
ALTER SCHEMA schema_name TRANSFER [ entity_type :: ]
securable_name [;]
Arguments
schema_name Is the name of a schema in the current database, into which the securable will be moved. Cannot be SYS or
INFORMATION_SCHEMA.
securable_name Is the one-part or two-part name of a schema-contained securable to be moved into the schema.
所以你需要
SELECT 'ALTER SCHEMA ['+ @NewSchema +'] TRANSFER [' + @OldSchema + '].[' + DbObjects.Name + '];' AS Cmd
我正在尝试更新所有表、过程和视图的特定模式;但是,我收到了权限错误,我已经尝试了所有方法。
有人可以帮助显示为下面的查询设置权限的正确方法,以免收到下面的错误。
查询
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 ***'
错误
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
来自 https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-schema-transact-sql :
ALTER SCHEMA schema_name TRANSFER [ entity_type :: ] securable_name [;]
Arguments
schema_name Is the name of a schema in the current database, into which the securable will be moved. Cannot be SYS or INFORMATION_SCHEMA.
securable_name Is the one-part or two-part name of a schema-contained securable to be moved into the schema.
所以你需要
SELECT 'ALTER SCHEMA ['+ @NewSchema +'] TRANSFER [' + @OldSchema + '].[' + DbObjects.Name + '];' AS Cmd