有没有一种方法可以为结果集中的每个记录运行安全性命令,而无需使用游标

时间:2019-06-26 19:16:22

标签: sql sql-server-2016 cursors

我需要向数据库中已启用更改跟踪的每个表的AD组授予“查看更改跟踪”权限。

我知道我可以使用游标,sp_executesql和sys.change_tracking_tables系统表相当容易地做到这一点,但是我很好奇是否有一种无需使用游标即可解决此问题的方法。

我正在使用SQL Server 2016 Enterprise。

游标示例(有效)

DECLARE @TableName AS NVARCHAR(MAX);
DECLARE @SQLCommand AS NVARCHAR(MAX);

DECLARE ChangeTrackingTablesCursor CURSOR STATIC LOCAL
FOR SELECT OBJECT_NAME(object_id) AS TableName
FROM sys.change_tracking_tables;

OPEN ChangeTrackingTablesCursor;
WHILE 1=1
    BEGIN
        FETCH ChangeTrackingTablesCursor INTO @TableName;
        IF @@FETCH_STATUS <> 0
            BEGIN
                BREAK;
            END;
        SET @SQLCommand = 'GRANT VIEW CHANGE TRACKING ON OBJECT::'+@TableName+' TO [domain\groupname]';
        EXEC sp_executesql @SQLCommand, N'';

    END;

这可以按预期工作,可以在每个启用了更改跟踪的表中运行并运行适当的SQL命令,但是我试图在不使用游标和sp_executesql的情况下执行此操作。

0 个答案:

没有答案