2016-09-09 7 views
0

これが可能かどうかわかりませんか?私は挿入/削除/更新されたテーブルをトリガからストアドプロシージャに渡す例を探しています。挿入/削除/更新されたテーブルをトリガからストアドプロシージャに渡すことは可能ですか

注:このトリガーをデータベースのすべてのテーブルに追加したいと思います。個々のテーブルごとにトリガーを書き換えたり生成したりする必要はありません。

テーブルを変更すると、トリガーを変更する必要はありません。

CREATE TRIGGER [schema].[myTable_myTrigger] ON [schema].[myTable] 
AFTER INSERT, 
    INSERT, 
    DELETE 
AS 
BEGIN 
    SET NOCOUNT ON; 

    DECLARE @tableAfterChange TABLE 
    DECLARE @tableBeforeChange TABLE 

    -- If is insert 
    -- BEGIN 
    --  @tableAfterChange = inserted 
    -- END 
    -- ELSE if is delete 
    -- BEGIN 
    --  @tableAfterChange = deleted 
    -- END 
    --ELSE 
    --BEGIN 
    --  Else if is update 
    -- @tableAfterChange = updated 
    --END 

    EXEC dbo.myProcedure @tableBeforeChange, @tableBeforeChange 
END 

答えて

0

ストアドプロシージャのパラメータをテーブル値のパラメータとして宣言する必要がある場合は、これを行うことができます。

CREATE TRIGGER [schema].[myTable_myTrigger] ON [schema].[myTable] 
AFTER INSERT 
    ,UPDATE 
    ,DELETE 
AS 
BEGIN 
    SET NOCOUNT ON; 

    DECLARE @tableAfterChange TABLE (
     COL1 DATATYPE 
     ,COL2 DATATYPE 
     ,... 
     ) 
    DECLARE @tableBeforeChange TABLE (
     COL1 DATATYPE 
     ,COL2 DATATYPE 
     ,... 
     ) 

    INSERT @tableBeforeChange 
    SELECT * 
    FROM DELETED 

    INSERT @tableAfterChange 
    SELECT * 
    FROM INSERTED 

    EXEC dbo.myProcedure @tableBeforeChange 
     ,@tableBeforeChange 
END 
+0

ありがとう、どうもありがとう、手前のテーブル構造を知らずにやっているのですか? – fox909a

0

トリガーは、例の[myTable]の特定のテーブルにあります。そのテーブルにトリガを作成するので、テーブル構造を取得できます。私の理解はあなたが[myTable]の変更後のデータと変更前のデータをキャプチャしたいと思うことです

+0

ありがとう、私はdbのすべてのテーブルにこのトリガを追加したいので、私は手前の構造を知っていません。私は質問を更新しました。うまくいけばそれは理にかなっている。 – fox909a

+0

@ fox909a、dbo.myProcedureのテーブル '@tableBeforeChange'と '@tableAfterChange'で何をしたいですか? – bhuvana

関連する問題