使用旧值和更新值的SQL触发器

时间:2014-09-16 13:44:52

标签: mysql sql sql-server

我无法弄清楚如何将SQL触发器中的旧值和更新值插入表中。假设我有一个表OrigTable和一个表NewTable。当我运行SQL触发器更新语句时,我希望将NewTable中的列名Col1更新为UPDATE语句中的新值,其中Col1值等于NewTable Col1中更改的旧值。

例如语句将是UPDATE OrigTable SET Col1 ='10'WHERE Col1 ='2'并且在此语句之后,触发器将触发并在NewTable上运行UPDATE语句并在NewTable中将Col1设置为等于10 Col1等于2。

1 个答案:

答案 0 :(得分:0)

基本上你可以这样做:

UPDATE NewTable
SET Col1 = (SELECT TOP 1 inserted.Col1 FROM inserted)
WHERE NewTable.Col1 = (SELECT TOP 1 deleted.Col1 FROM deleted)

如果您一次只更新1行,这将有效。 每次更新查询时,SQL触发器仅触发一次。所以我建议您使用Sql-Cursor来完成它。试试这个:

DECLARE @newValue nvarchar(max),
        @oldValue nvarchar(max)
DECLARE c1 CURSOR LOCAL FAST_FORWARD FOR
SELECT inserted.Col1, deleted.Col1
FROM inserted
JOIN deleted ON deleted.InsertYourPrimaryKeyHere = deleted.InsertYourPrimaryKeyHere
OPEN c1
FETCH NEXT FROM c1 INTO @newValue, @oldValue
WHILE @@FETCH_STATUS = 0 
BEGIN
  BEGIN
    UPDATE NewTable
    SET NewTable.Col1 = @newValue
    WHERE NewTable.Col1 = @oldValue
  END
  FETCH NEXT FROM c1 INTO @newValue, @oldValue
END
CLOSE c1
DEALLOCATE c1

将此代码剪切到OrigTable

上的插入触发器中