Scenariusz:
Pracujesz jako SQL Server DBA lub Developer, Musisz przygotować skrypt, który powinien być w stanie wyłączyć przechwytywanie zmian danych (CDC) na wszystkich tabelach w bazie danych lub jeśli chcesz wyłączyć na jakiejś konkretnej tabeli, powinien być w stanie aby sobie z tym poradzić.Poniższy skrypt może być użyty do wyłączenia zmiany przechwytywania danych we wszystkich tabelach w bazie danych, a jeśli chcesz podać listę tabel, również masz taką opcję. Po prostu zmieniając zapytanie wybierające, możesz uwzględnić lub wykluczyć listę tabel, w których chcesz wyłączyć CDC.
/*------------------------------------------------ Disable CDC on Set of Tables --------------------------------------------------*/
DECLARE @TableName VARCHAR(100)
DECLARE CDC_Cursor CURSOR FOR
--Provide List of Tables here on which CDC needs to be disabled. SELECT * FROM (SELECT 'T' AS TableName UNION ALL SELECT 'T2' AS TableName --IF want to Disable CDC on All Table, then use --SELECT Name --FROM sys.objects --WHERE type = 'u' -- AND is_ms_shipped <> 1 ) CDC OPEN CDC_Cursor FETCH NEXT FROM CDC_Cursor INTO @TableName WHILE @@FETCH_STATUS = 0 BEGIN DECLARE @SQL NVARCHAR(1000) DECLARE @CDC_Status TINYINT SET @CDC_Status=(SELECT COUNT(*) FROM cdc.change_tables WHERE Source_object_id = OBJECT_ID(@TableName)) --IF CDC is Already Disabled on Table , Print Message IF @CDC_Status = 0 PRINT 'CDC is already Disabled on ' + @TableName + ' Table' --IF CDC is not Disabled on Table, Disable CDC and Print Message IF @CDC_Status = 1 BEGIN SET @SQL='EXEC sys.sp_cdc_disable_table @source_schema = ''dbo'', @source_name = ''' + @TableName + ''', @capture_instance = N''All'';' EXEC sp_executesql @SQL PRINT 'CDC disabled on ' + @TableName + ' Table successfully' END FETCH NEXT FROM CDC_Cursor INTO @TableName END CLOSE CDC_Cursor DEALLOCATE CDC_Cursor