gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 23:46:53 24 4
gpt4 key购买 nike

我不知道如何将旧值和更新值从 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。

最佳答案

基本上你可以做这样的事情:

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

关于mysql - 使用旧值和更新值的 SQL 触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25870502/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com