2017-06-30 55 views
0

スクリプトはbegin transactionとcommitトランザクションでラップされます。 Go inbetweenを使用することはできません。'CREATE TRIGGER'はクエリバッチの最初の文である必要があります

Msg 111, Level 15, State 1, Line 6 'CREATE TRIGGER' must be the first statement in a query batch.

私のコードは次のとおりです:

 

BEGIN TRY 
BEGIN TRANSACTION 

DISABLE TRIGGER [dbo].[trg_Beneficiary_After_Update] ON [dbo].[Beneficiary] 

CREATE TRIGGER [dbo].[trg_Beneficiary_After_Update1] ON [dbo].[Beneficiary] FOR UPDATE AS 
BEGIN 
INSERT INTO [dbo].[Beneficiary_History]([Beneficiary_Id],[Customer_Id],[Beneficiary_Type],[Nick_Name],[Rib_Key],[Action_Flag],[Benef_No],[Original_Date],[Provider_Id],[Create_Date]) 
SELECT [Beneficiary_Id],[Customer_Id],[Beneficiary_Type],[Nick_Name],[Rib_Key],'U',[Benef_No],[Create_Date],[Provider_Id],GETDATE() FROM DELETE 
PRINT 'AFTER Beneficiary Table UPDATE1 trigger fired.' 
END 

UPDATE [dbo].[Beneficiary] SET [Benef_No] = REPLACE (Benef_No, +2120, ++212) WHERE Benef_No like '+2120%' 

DISABLE TRIGGER [dbo].[trg_Beneficiary_After_Update1] ON [$(oltpdb)].[dbo].[Beneficiary] ; 

ENABLE TRIGGER [dbo].[trg_Beneficiary_After_Update] ON [$(oltpdb)].[dbo].[Beneficiary] 

end 
COMMIT TRANSACTION                  END TRY 
BEGIN CATCH 
    ROLLBACK TRANSACTION 
END CATCH; 
+2

として

は、コードを参照してくださいする必要があり... – VDK

+0

は、単に順番を切り替えますか? – jarlh

+0

ここにコードを掲載することができません。 – Priyanka

答えて

2

私は1つのトリガーを無効にしたいし、別の1 を作成したいが、私は両方のステートメントを実行すると同時に、私はfollのエラーを取得するスクリプトで @Priyanka、ストアドプロシージャに埋め込まれるトリガを作成するために動的SQLを使用できます。セミコロンを使用すると、バッチ方式でスクリプトが実行されます。しかし、このインスタンスでは、このストアドプロシージャの外側にトリガを作成するのが常にベストプラクティスです。このスクリプトをテストして、動作しているかどうか教えてください。

BEGIN TRY 
    BEGIN TRANSACTION 

    BEGIN 
      ; 

     DISABLE TRIGGER [dbo].[trg_Beneficiary_After_Update] 
      ON [dbo].[Beneficiary]; 

     DECLARE @SQL VARCHAR(MAX); 

     SET @SQL = 
      'CREATE TRIGGER [dbo].[trg_Beneficiary_After_Update1] ON [dbo].[Beneficiary] FOR UPDATE AS 
       BEGIN 
      INSERT INTO [dbo].[Beneficiary_History]([Beneficiary_Id],[Customer_Id],[Beneficiary_Type],[Nick_Name],[Rib_Key],[Action_Flag],[Benef_No],[Original_Date],[Provider_Id],[Create_Date]) 
      SELECT [Beneficiary_Id],[Customer_Id],[Beneficiary_Type],[Nick_Name],[Rib_Key],''U'',[Benef_No],[Create_Date],[Provider_Id],GETDATE() FROM DELETED 
      PRINT ''AFTER Beneficiary Table UPDATE1 trigger fired'' END' 

     EXEC (@SQL); 

     UPDATE [dbo].[Beneficiary] 
     SET [Benef_No] = REPLACE(Benef_No, + 2120, + + 212) 
     WHERE Benef_No LIKE '+2120%'; 

     DISABLE TRIGGER [dbo].[trg_Beneficiary_After_Update1] 
      ON [$(oltpdb)].[dbo].[Beneficiary]; 

     ENABLE TRIGGER [dbo].[trg_Beneficiary_After_Update] 
      ON [$(oltpdb)].[dbo].[Beneficiary]; 
    END 

    COMMIT TRANSACTION; 
END TRY 

BEGIN CATCH 
    ROLLBACK TRANSACTION 
END CATCH; 
+0

@priyanka離陸したい場合は開始して終了しますが、それでも動作します –

+0

それは働いています...ありがとうございます@B House :) – Priyanka

+0

@Priyanka That Brilliant、ありがとうフィードバックをお願いします:) –

0

";"終わりの行に!

BEGIN TRY 
BEGIN TRANSACTION 

DISABLE TRIGGER [dbo].[trg_Beneficiary_After_Update] ON [dbo].[Beneficiary]; 

CREATE TRIGGER [dbo].[trg_Beneficiary_After_Update1] ON [dbo].[Beneficiary] FOR UPDATE AS 
BEGIN 
INSERT INTO [dbo].[Beneficiary_History]([Beneficiary_Id],[Customer_Id],[Beneficiary_Type],[Nick_Name],[Rib_Key],[Action_Flag],[Benef_No],[Original_Date],[Provider_Id],[Create_Date]) 
SELECT [Beneficiary_Id],[Customer_Id],[Beneficiary_Type],[Nick_Name],[Rib_Key],'U',[Benef_No],[Create_Date],[Provider_Id],GETDATE() FROM DELETE 
PRINT 'AFTER Beneficiary Table UPDATE1 trigger fired.' 
END 

UPDATE [dbo].[Beneficiary] SET [Benef_No] = REPLACE (Benef_No, +2120, ++212) WHERE Benef_No like '+2120%' 

DISABLE TRIGGER [dbo].[trg_Beneficiary_After_Update1] ON [$(oltpdb)].[dbo].[Beneficiary] ; 

ENABLE TRIGGER [dbo].[trg_Beneficiary_After_Update] ON [$(oltpdb)].[dbo].[Beneficiary] ; 

end 
COMMIT TRANSACTION                  END TRY 
BEGIN CATCH 
    ROLLBACK TRANSACTION 
END CATCH; 
関連する問題