sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man inaktiverar alla utlösare i SQL Server Database

Ibland har vi krav på att vi måste inaktivera alla triggers i SQL Server Database. Vi kan använda markören i TSQL för att gå igenom listan över triggers och sedan inaktivera dem.

Skript nedan kan användas för att inaktivera alla triggers i SQL Server Database.

ANVÄND [Databas]

GO
DECLARE @TriggerName SOM VARCHAR(500)
DECLARE @TableName AS VARCHAR(500)
DECLARE @SchemaName AS VARCHAR(100)
--Inaktivera alla utlösare i en databas i SQL Server
DECLARE DisableTrigger CURSOR FOR
SELECT TBL.name AS TableName,
Schema_name(TBL.schema_id) AS Table_SchemaName,
TRG .name AS TriggerName
FRÅN sys.triggers TRG
INNER JOIN sys.tables TBL
PÅ TBL.OBJECT_ID =TRG.parent_id
OCH TRG.is_disabled=0
OCH TBL.is_ms_shipped=0
ÖPPNA DisableTrigger
HÄMTA Nästa FRÅN DisableTrigger INTO @TableName,@SchemaName,@TriggerName
MED @@FETCH_STATUS =0
BÖRJA
DECLARE @SQL VARCHAR(MAX)=NU LL

SET @SQL='Inaktivera trigger ' + @TriggerName +' PÅ '+@SchemaName+'.'+@TableName

EXEC (@SQL)
SKRIV UT 'Trigger ::' + @TriggerName + 'är inaktiverat på '+@SchemaName+'.'+@TableName
PRINT @SQL

HÄMTA Nästa FRÅN DisableTrigger INTO @TableName,@SchemaName, @TriggerName
END

STÄNG DisableTrigger
DEALLOCATE DisableTrigger



För att kontrollera om alla utlösare är inaktiverade korrekt i SQL Serverdatabas, använd nedanstående fråga

SELECT TBL.name AS TableName,
Schema_name(TBL.schema_id) AS Table_SchemaName,
TRG.name AS TriggerName,
TRG. parent_class_desc,
FALL
NÄR TRG.is_disabled =0 DÅ 'Aktivera'
ANNAT 'Avaktivera'
AVSLUTA SOM TRG_Status
FRÅN sys.triggers TRG
INNER JOIN sys.tables TBL
PÅ TBL.OBJECT_ID =TRG.parent_id
OCH trg.is_disabled=1 --använd det här filtret för att få inaktiverade utlösare
  1. Hur LOCATE() fungerar i MariaDB

  2. Hur man beräknar skillnaden mellan två tidsstämplar i PostgreSQL

  3. Hur man tar bort en del av strängen i Oracle

  4. PostgreSQL och C# datatyper