【发布时间】:2010-09-16 13:24:50
【问题描述】:
我想将存储过程转换为触发器。存储过程应该在插入/更新之后运行,但用户经常忘记执行它!
存储过程为某些行插入重新计算的值:
--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
非常感谢任何有关如何解决此问题的帮助。
非常感谢
标记
【问题讨论】:
标签: sql tsql sql-server-2008 triggers