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

Mysql 使用旧值和更新值的SQL触发器,mysql,sql,sql-server,Mysql,Sql,Sql Server,我不知道如何将SQL触发器中的旧值和更新值插入到表中。假设我有一个表OrigTable和一个表NewTable。运行SQL触发器update语句时,我希望将NewTable中的列名Col1更新为update语句中的新值,其中Col1值等于NewTable Col1中更改的旧值 例如,该语句将是UPDATE OrigTable SET Col1='10',其中Col1='2',在此语句之后,触发器将在NewTable上触发并运行UPDATE语句,并在Col1等于2的每个点上将NewTable中的C

我不知道如何将SQL触发器中的旧值和更新值插入到表中。假设我有一个表OrigTable和一个表NewTable。运行SQL触发器update语句时,我希望将NewTable中的列名Col1更新为update语句中的新值,其中Col1值等于NewTable Col1中更改的旧值


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

基本上可以执行以下操作:

UPDATE NewTable
SET Col1 = (SELECT TOP 1 inserted.Col1 FROM inserted)
WHERE NewTable.Col1 = (SELECT TOP 1 deleted.Col1 FROM deleted)
如果一次只更新一行,这将起作用。 SQL触发器在每个更新查询中仅触发一次。因此,我建议您使用Sql游标来执行此操作。试试这个:

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上的插入触发器中

您使用的是sql server还是mysql?它们不是一回事。另外,为什么您需要同时捕获新旧价值观?为什么不抓住旧的价值观呢。新值将出现在基本表或审核表的下一行中。