Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment désactiver tous les déclencheurs dans la base de données SQL Server

Parfois, nous avons besoin de désactiver tous les déclencheurs dans la base de données SQL Server. Nous pouvons utiliser le curseur dans TSQL pour parcourir la liste des déclencheurs, puis les désactiver.

Le script ci-dessous peut être utilisé pour désactiver tous les déclencheurs dans la base de données SQL Server.

UTILISATION [Database]

GO
DECLARE @TriggerName AS VARCHAR(500)
DECLARE @TableName AS VARCHAR(500)
DECLARE @SchemaName AS VARCHAR(100)
--Désactiver tous les déclencheurs dans une base de données dans SQL Server
DECLARE DisableTrigger CURSOR FOR
SELECT TBL.name AS TableName,
Schema_name(TBL.schema_id) AS Table_SchemaName,
TRG .name AS TriggerName
FROM sys.triggers TRG
INNER JOIN sys.tables TBL
ON TBL.OBJECT_ID =TRG.parent_id
AND TRG.is_disabled=0
AND TBL.is_ms_shipped=0
OPEN DisableTrigger
FETCH Next FROM DisableTrigger INTO @TableName,@SchemaName,@TriggerName
WHILE @@FETCH_STATUS =0
BEGIN
DECLARE @SQL VARCHAR(MAX)=NU LL

SET @SQL='Disable Trigger ' + @TriggerName +' ON '+@SchemaName+'.'+@TableName

EXEC (@SQL)
PRINT 'Trigger ::' + @TriggerName + 'est désactivé sur '+@SchemaName+'.'+@TableName
PRINT @SQL

FETCH Next FROM DisableTrigger INTO @TableName,@SchemaName, @TriggerName
END

CLOSE DisableTrigger
DEALLOCATE DisableTrigger



Pour vérifier si tous les déclencheurs sont désactivés correctement dans SQL Base de données du serveur, utilisez la requête ci-dessous

SELECT TBL.name AS TableName,
Schema_name(TBL.schema_id) AS Table_SchemaName,
TRG.name AS TriggerName,
TRG. parent_class_desc,
CASE
WHEN TRG.is_disabled =0 THEN 'Enable'
ELSE 'Disable'
END AS TRG_Status
FROM sys.triggers TRG
INNER JOIN sys.tables TBL
ON TBL.OBJECT_ID =TRG.parent_id
AND trg.is_disabled=1 --utilisez ce filtre pour obtenir les déclencheurs désactivés