sql >> データベース >  >> RDS >> Sqlserver

SQLServerデータベースのすべてのトリガーを無効にする方法

    SQLServerデータベースのすべてのトリガーを無効にする必要がある場合があります。 TSQLでカーソルを使用してトリガーのリストをループして無効にすることができます。

    以下のスクリプトを使用して、SQLServerデータベースのすべてのトリガーを無効にすることができます。

    USE [データベース]

    GO
    DECLARE @TriggerName AS VARCHAR(500)
    DECLARE @TableName AS VARCHAR(500)
    DECLARE @SchemaName AS VARCHAR(100)
    --SQLServerのデータベース内のすべてのトリガーを無効にする
    DECLAREDisableTrigger 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='トリガーを無効にする'+@TriggerName +'ON' + @SchemaName+'。'+@ TableName

    EXEC(@SQL)
    PRINT'Trigger ::' + @TriggerName+'は'+@SchemaName+'で無効になっています。'+@ TableName
    PRINT @SQL

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

    CLOSE DisableTrigger
    DEALLOCATE DisableTrigger



    SQLですべてのトリガーが正しく無効になっているかどうかを確認するにはサーバーデータベース、以下のクエリを使用します

    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-このフィルターを使用して、無効なトリガーを取得します
    1. SQL Serverの現在のすべての一時テーブルのリストを取得する方法はありますか?

    2. 統計を待つだけでは不十分な理由

    3. コミットされたスナップショットアイソレーションを読む

    4. IN演算子を使用してjsonb配列をクエリする方法