【问题标题】:Is it possible to pass the inserted / deleted / updated table from a trigger to a stored procedure是否可以将插入/删除/更新的表从触发器传递到存储过程
【发布时间】:2017-01-17 06:07:33
【问题描述】:

我不确定这是否可能?我正在寻找将插入/删除/更新表从触发器传递到存储过程的示例。

注意:我想将此触发器添加到数据库中的所有表中,并且我不想为每个单独的表重写/生成触发器。

这样,如果表发生变化,触发器也不需要更改。

例如像这样:

   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

【问题讨论】:

    标签: sql-server-2008 tsql triggers


    【解决方案1】:

    如果您的存储过程参数应声明为表值参数,您可以像下面这样执行此操作。

    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
    

    【讨论】:

    • 谢谢,有没有事先不知道表结构的情况下做呢?
    【解决方案2】:

    触发器位于您示例中的 [myTable] 的特定表上。您可以获得表结构,因为您正在该表上创建触发器。我的理解是,您确实希望捕获更改前的数据和更改 [myTable] 后的数据

    【讨论】:

    • 谢谢,我想将此触发器添加到数据库中的所有表中,因此我不会事先知道结构。我已经更新了这个问题。希望这是有道理的。
    • @fox909a,您想对 dbo.myProcedure 中的表“@tableBeforeChange”和“@tableAfterChange”做什么?
    猜你喜欢
    • 1970-01-01
    • 2015-04-26
    • 2020-05-20
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    • 1970-01-01
    • 2014-06-23
    • 2011-02-27
    相关资源
    最近更新 更多