2013-10-09 137 views
0

我有这个触发器在另一个SQL服务器/数据库上工作正常..现在它什么都不做,我需要设置任何先决条件或想法为什么这不工作.. SQL Server 2008SQL触发器不工作/更新表

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 

感谢,

想通了,这是通过将触发..插入到表是做批量插入,那里的程序去与工作INSTEAD OF触发器。再次感谢亚伦伯特兰试图找出与我一样。

+0

你确定它应该影响任何行吗?例如。也许没有行插入TagID = 8或UpdateC = 0.无论如何,你的触发器正在查看整个表 - 你应该限制你的查询在'inserted'伪表中找到的行。 –

+0

大约有1000行符合这个标准。这只是在我的大脑中单击,我在另一张桌子上做单行插入测试,现在它正在尝试做多行..可能这是问题,我将如何重写此.. –

+0

你有5个其他触发器上这张桌子? –

回答

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这么多的限制,除非我们已经知道您的环境不受任何限制,否则通常只会浪费精力。

+0

我会把我的key_column名称放在什么位置?它会在那里出错。再次感谢您的帮助。 –

+0

@PatPav你的表有一个主键?试试看。 –

+0

我向BM1OILT添加了一个主键,NumericSamples已经有一个主键。尝试了几个不同的变化,但仍然没有运气。有一些设置,我错过了SQL?我想我会尝试远程到我今天晚上的其他SQL服务器,看看我是否可以删除重新创建触发器,看看触发器是否仍然有效,也许我做过一些事情,我忘了这次做... –