如何为三个表的插入创建SQL触发器

时间:2012-12-25 09:18:07

标签: sql triggers insert sql-update

我想创建SQL Trigger,如下所示:

CREATE TRIGGER Multi_Insert ON ITEMS, COMPONENT, LINK_INFO
FOR INSERT  
AS  
INSERT INTO Multi_Insert (ACTION, PUBLICATION_ID, ITEM_REFERENCE_ID, ITEM_TYPE, LAST_PUBLISHED_DATE, URL, SCHEMA_ID)  
SELECT 'ADD', PUBLICATION_ID, ITEM_REFERENCE_ID, ITEM_TYPE, LAST_PUBLISHED_DATE, URL, SCHEMA_ID  
FROM inserted  

在上面的触发器中,所有来自一个表ITEMS的详细信息,现在某些值已移至SCHEMA_ID等其他表,现在位于COMPONENTURLLINK_INFO

实际上在上面的insert/update/delete表中,我们将更新,插入和删除Multi_Insert表,现在我们可以在每个表插入ITEMS上为插入事件编写三个触发器, COMPONENTLINK_INFO,但我想只使用一个触发器实现此目的

这可能吗?

1 个答案:

答案 0 :(得分:1)

DECLARE @i INT, @d INT;
SELECT @i = COUNT(*) FROM inserted;
SELECT @d = COUNT(*) FROM deleted;
IF @i + @d > 0
BEGIN
    IF @i > 0 AND @d = 0
        -- insert
    IF @i > 0 AND @d > 0
        -- update
    IF @i = 0 AND @d > 0
        -- delete
END

正如我告诉过你的那样,我对你的问题并不是很清楚。而且,无论如何,我从你那里得到了问题。我编写了简单的查询,以便您可以获取引用并相应地使用它。

从上面的查询中,@d@i声明了两个变量,从第2行和第3行我将存储来自不同表的count(行数)。然后,我正在检查表是否有一些行的值。然后,在检查表是否有某些行之后执行insertupdatedelete。现在,那个困难的部分是什么?我给了你,你如何在单trigger休息中完成所有这三项任务取决于你,你如何使用它们。您也可以参考此link