我在表上更新后有一个触发器,一个事务中有2个更新。第一次更新后调用了触发器。我希望,在整个事务之后触发视图更新,但事实并非如此:
我的交易:
可以设置触发器,然后在事务后触发查看数据(从1到3)?
我的触发器:
ALTER TRIGGER "dbo"."TRIGGER"
ON TABLE
FOR UPDATE
AS
IF (SELECT COUNT(*) FROM inserted i, deleted d
WHERE d.aaa IS NULL
AND i.aaa IS NOT NULL
AND i.bbb IN ('0', '1', '6', '9')) > 0
BEGIN
INSERT INTO export (aaa, ccc)
(SELECT aaa, ccc FROM inserted)
END
初始数据:insert into TABLE(aaa,bbb,ccc) values(123,'N',100)
更新
update TABLE set bbb = '0' where aaa = 123
update TABLE set ccc = 1 where aaa = 123
期待:insert into export(123,1)
但它调用:insert into export(123,100)
答案 0 :(得分:1)
我看到了你的问题。
但是,SQL Server中的触发器是语句级别的,不幸的是它们不像您期望的那样工作。您可以通过向表中添加一些“控制”列(在事务的最后更新它并在其周围创建一些逻辑)或使用context_info来使其工作,但它确实闻到了恕我直言。
远离触发器并从主示波器插入导出表,这是您的最佳选择。