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