Scénario :
Vous travaillez en tant que DBA ou développeur SQL Server, vous devez préparer un script qui devrait pouvoir désactiver la capture de données modifiées (CDC) sur toutes les tables d'une base de données ou si vous souhaitez désactiver sur une table spécifique, il devrait pouvoir pour gérer cela.Le script ci-dessous peut être utilisé pour désactiver la capture de données modifiées sur toutes les tables d'une base de données et si vous souhaitez fournir la liste des tables, vous avez également la possibilité. En modifiant simplement la requête de sélection, vous pouvez inclure ou exclure la liste des tables sur lesquelles vous souhaitez désactiver CDC.
/*------------------ ------------------------------Désactiver CDC sur l'ensemble de tables----------------------- -------------------------------------*/
DECLARER @TableName VARCHAR(100)
DECLARER CDC_Cursor CURSEUR POUR
--Fournissez ici la liste des tables sur lesquelles CDC doit être désactivé. SELECT * FROM (SELECT 'T' AS TableName UNION ALL SELECT 'T2' AS TableName --SI vous voulez désactiver CDC sur toutes les tables, puis utilisez --SELECT Name --FROM sys.objects --WHERE type ='u' - - AND is_ms_shipped <> 1 ) CDCOPEN CDC_CursorFETCH NEXT FROM CDC_Cursor INTO @TableNameWHILE @@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 est déjà désactivé sur la table, imprimez le message IF @CDC_Status =0 PRINT 'CDC est déjà désactivé sur ' + @TableName + 'Table' --IF CDC n'est pas désactivé sur la table, désactivez CDC et Imprimer le message SI @CDC_Status =1 BEGIN SET @SQL='EXEC sys.sp_cdc_disable_table @source_schema =''dbo'', @source_name =''' + @TableName + ''', @capture_instance =N''Tous'';' EXEC sp_executesql @SQL PRINT 'CDC désactivé sur ' + @TableName + ' Table avec succès' END FETCH NEXT FROM CDC_Cursor INTO @TableName ENDCLOSE CDC_CursorDEALLOCATE CDC_Cursor