1
我会尽量解释我的问题,基本的可能:SQL服务器触发与比较基础的审计表中特定列
我有两个表:Foo
和Foo_Audit
。
在行更新我想将行复制到Foo_Audit
表,但仅当Foo.Bar
或Foo.Qux
的值发生更改时。 Foo.Baz
需要忽略。
这里是我的代码:
CREATE TRIGGER tr_Foo_Modified
ON Foo
FOR UPDATE
AS
SET NOCOUNT ON
DECLARE @rowCount int
SELECT @rowCount = COUNT(*)
FROM (SELECT Bar, Qux
FROM inserted
EXCEPT
SELECT Bar, Qux
FROM deleted) #TempTable
IF (@rowCount > 0)
BEGIN
INSERT INTO Foo_Audit(Bar, Qux, Baz)
SELECT
Bar, Qux, Baz
FROM Foo
END
一切工作完全正常,如果我在当时只更新一行进行测试。但是,当同时更新多个行(〜400)时,它有时会多次将同一行添加到Foo_Audit
表中,并且即使Foo.Bar
或Foo.Qux
的值未发生更改,它也会添加该行。
有谁知道,如何让我的代码同时在多行更新上工作?同时我的意思是毫秒。
感谢您的回答。奇迹般有效!来自巴塞尔的问候:) – soumer