0

我让这个触发器在另一个 sql server/database 上工作正常。现在它什么都不做,我需要设置的任何先决条件或想法为什么这不起作用.. SQL Server 2008

create trigger Autoupdate6 -- Creating Trigger
On NumericSamples
For Insert
As
Insert Into BM1OILT
Select SampleDateTime, SampleValue From NumericSamples 
Where TagID = 8 and UpdateC = 0
UPDATE NumericSamples set UpdateC = 1 WHERE TagID = 8
go

谢谢,

弄清楚了,插入到表中的程序正在执行批量插入,通过传递触发器.. 使用工作而不是触发器。再次感谢 Aaron Bertrand 试图和我一起解决这个问题。

4

1 回答 1

0

这将阻止触发器尝试对整个表进行操作:

CREATE TRIGGER dbo.Autoupdate6
ON dbo.NumericSamples
FOR INSERT
AS
BEGIN
  INSERT INTO dbo.BM1OILT(...column names here please...)
    SELECT SampleDateTime, SampleValue FROM inserted
    WHERE TagID = 8 AND UpdateC = 0;

  UPDATE n SET UpdateC = 1
    FROM dbo.NumericSamples AS n
    INNER JOIN inserted AS i
    ON n.SampleDateTime = i.SampleDateTime
    WHERE n.UpdateC = 0 AND n.TagID = 8;
END
GO

您可以使用该OUTPUT子句将其折叠为一个语句,但是可组合 DML 有很多限制,除非我们已经知道您的环境不受任何限制,否则这通常只是浪费精力。

于 2013-10-09T21:27:06.970 回答