是否可以将插入/删除/更新的表从触发器传递到存储过程

时间:2016-09-09 07:03:12

标签: sql-server-2008 tsql triggers

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

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

这样,如果表格改变,则不需要更改触发器。

e.g。像这样的东西:

/test-*/_aliases

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

之后捕获更改前的数据和数据