我无法弄清楚如何将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。
答案 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
上的插入触发器中