我不得不對觸發器進行更改,並假定運行如下更新查詢會使觸發器對所有匹配的行執行。但是,它只會更新它找到的記錄。有沒有辦法強制觸發器在多行更新語句上運行?
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