我需要向数据库中已启用更改跟踪的每个表的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的情况下执行此操作。