2010-09-16 87 views
0

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

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

--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?

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 

任何有关如何去做这个的帮助将非常感激。

非常感谢
马克

回答

0

您应该使用FOR

触发相较于存储过程这一切看起来不错。

你还有什么其他问题?

1

您忘记了删除部分。

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

使其成为AFter触发器,After和For是相同的,但后面是更新的语法。