【问题标题】:How to BULK UPDATE SQL Schemas如何批量更新 SQL 模式
【发布时间】:2017-09-04 19:03:35
【问题描述】:

我正在尝试更新所有表、过程和视图的特定架构;但是,我收到一个权限错误,我已经尝试了所有方法。

有人可以帮助展示设置以下查询的权限以不收到以下错误的正确方法。

查询

    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

【问题讨论】:

    标签: sql sql-server database tsql database-schema


    【解决方案1】:

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

    ALTER SCHEMA schema_name TRANSFER [ entity_type :: ] 安全名称 [;]

    参数

    schema_name 是当前数据库中的模式名称,安全对象将被移动到其中。不能是 SYS 或 INFORMATION_SCHEMA。

    securable_name 是要移动到架构中的包含架构的安全对象的一部分或两部分的名称。

    所以你需要

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

    【讨论】:

    • 很高兴我提出这个问题,因为我的印象是架构正在被移动,但事实并非如此。正在传输的是表而不是模式。我的问题是我尚未创建 CadType 架构并将其设置为登录用户。几乎不好意思承认这一点。
    猜你喜欢
    • 2023-04-09
    • 1970-01-01
    • 2012-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多