Scénář:
Pracujete jako SQL Server DBA nebo vývojář, musíte připravit skript, který by měl být schopen deaktivovat Change Data Capture (CDC) na všech tabulkách v databázi, nebo pokud chcete deaktivovat na některé konkrétní tabulce, měl by být schopen abyste to zvládli.Níže uvedený skript lze použít k zakázání zachytávání změn dat na všech tabulkách v databázi a pokud byste chtěli poskytnout seznam tabulek, máte také možnost. Pouhou změnou výběrového dotazu můžete zahrnout nebo vyloučit seznam tabulek, u kterých byste chtěli zakázat 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