我不得不对触发器进行更改,并假定运行如下更新查询会使触发器对所有匹配的行执行。但是,它只会更新它找到的记录。有没有办法强制触发器在多行更新语句上运行?
UPDATE someTable SET someField = someField WHERE someField = 'something';
作为一个快速的解决方案,我用游标来遍历记录并更新每一行创建下面的查询。它有效,幸运的是我没有一个非常大的数据集,所以它不需要太长的时间,但它看起来并不是最好的解决方案。
DECLARE @id INT;
DECLARE queryCursor CURSOR FOR
SELECT id FROM someTable WHERE someField='something'
OPEN queryCursor
FETCH NEXT FROM queryCursor INTO @id
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE someTable SET someField = someField WHERE id = @id
FETCH NEXT FROM queryCursor INTO @id
END
CLOSE queryCursor
DEALLOCATE queryCursor
有没有更好的方法来获得在SQL Server中的多行执行触发器?
编辑:从触发代码
FOR INSERT, UPDATE
AS
IF UPDATE (LineNumber)
OR UPDATE(LineService)
Begin
DECLARE @CDL VARCHAR(50)
DECLARE @LN VARCHAR(100)
DECLARE @A VARCHAR(25)
SELECT @CDL = CommonDataLink FROM INSERTED
SELECT @A = LineService FROM INSERTED
SET @LN = @CDL + @A
UPDATE CommonData SET ReportedLineNo = @LN WHERE CommonDataLink = @CDL
End
是修复触发器不是调用代码!我们需要触发器代码来帮助你修复它,但是触发器在一组数据上不是一个记录,如果你在触发器中设置了从插入或删除的值到标量变量,它几乎肯定是不正确的,需要被修复。 – HLGEM 2012-03-16 14:48:32