Есть ли способ запустить команду безопасности для каждой записи в наборе результатов, без использования курсоров - PullRequest
0 голосов
/ 26 июня 2019

Мне нужно разрешить просмотр отслеживания изменений для группы 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.

...