SQL存储过程:帮助转换为触发器

时间:2010-09-16 13:24:51

标签: sql tsql sql-server-2008 triggers

我想将存储过程转换为触发器。存储过程应该在插入/更新后运行,但是用户忘记执行它而不是经常!

存储过程为某些行插入重新计算的值:

--Delete rows where RowCode=111
DELETE FROM dbo.TableA WHERE [year]>=1998 AND RowCode=111

--Insert new values for RowCode=111 for years>=1998
INSERT INTO dbo.TableA
SELECT [Year], RowCode=111, ColCode, SUM(Amt) AS Amt
FROM dbo.TableA
WHERE [Year]>=1998 AND RowCode IN (1,12,23) AND ColCode=14
GROUP BY [Year], ColCode

我想将其置于触发器中,以便用户不必考虑运行过程。

我有以下开始,但我不确定我是否在正确的轨道上。我应该使用FOR,AFTER还是INSTEAD OF?

CREATE TRIGGER TRIU_TableA 
ON TableA 
FOR INSERT,UPDATE AS

BEGIN
  SET NOCOUNT ON
  IF EXISTS (SELECT * FROM Inserted WHERE RowCode=111)
  BEGIN
    INSERT INTO TableA
    SELECT [Year], RowCode, ColCode, SUM(Amt) AS Amt
    FROM Inserted
    WHERE [Year]>=1998 AND RowCode IN (1,12,23) AND ColCode=14
    GROUP BY [Year], ColCode
  END

END

非常感谢任何有关如何解决此问题的帮助。

非常感谢 标记

2 个答案:

答案 0 :(得分:1)

您忘记了删除部分。

但是为什么你的应用程序在每次插入/更新后都不会自动运行现有的proc?人们是否从查询窗口更新数据库?

使其成为一个AFter触发器,After和For是相同的,但之后是较新的语法。

答案 1 :(得分:0)

您应该使用FOR

将触发器与存储过程进行比较,一切看起来都很好。

你还有其他问题吗?