我将使用 INSERT
语句插入行,其中的值是静态的并且不在数据库中。像这样的东西:
INSERT INTO MY_TABLE (ID, NAME) VALUES(123, 'Herbert')
如果 MY_TABLE
已经有一行 ID
等于 123
但 NAME
是 Herbie
,如何将新数据保留在 INSERT
语句中(123
,Herbert
)并丢弃 中已有的数据MY_TABLE
(123
,Herbie
)?
我知道 SQL Server IGNORE_DUP_KEY
设置,但我认为它会忽略 INSERT
语句中的数据并保留表中已有的数据。我想要相反的。
更新
澄清一下,我不想更改 INSERT
语句。我想保持不变。我想以某种方式在服务器端完成工作。基本上 IGNORE_DUP_KEY
是我想要的,只是它保留了错误的数据。
更新2
我认为我想做的与提到的重复问题不同。我根本不想更改 INSERT
语句。我想在后端使用我不知道的 SQL Server 设置或创建触发器来处理它。
最佳答案
在我看来,您有 2 个选择。
首先,您可以从 ID = 您的 ID 所在的表中删除。这样做时不必担心 ID 是否已经存在,因为删除不存在的记录不会在 SQL 中产生错误。如果您坚持只使用 Insert 语句,那么这是您的选择。
添加
Delete MY_TABLE where ID = 123
INSERT INTO MY_TABLE (ID, NAME) VALUES(123, 'Herbert')
其次,您可以添加一个“检查”以查看该 ID 是否已存在,并根据该 ID 是否已存在有一个 Insert 语句和一个 Update 语句。
If(select ID from MY_TABLE where ID = 123)
Update MY_TABLE
Set NAME = 'Herbert'
Where ID = 123
ELSE
INSERT INTO MY_TABLE (ID, NAME) VALUES(123, 'Herbert')
关于sql-server - 从静态 INSERT 语句覆盖重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51620031/