sql-server - 覆盖静态 INSERT 语句中的重复行
问题描述
我将使用一个INSERT
语句插入行,其中值是静态的,并且尚未在数据库中。就像是:
INSERT INTO MY_TABLE (ID, NAME) VALUES(123, 'Herbert')
如果MY_TABLE
已经有一行ID
等于123
但NAME
is Herbie
,我如何将新数据保留在INSERT
语句 ( 123
, Herbert
) 中并丢弃MY_TABLE
( 123
, Herbie
) 中已有的数据?
我知道 SQL ServerIGNORE_DUP_KEY
设置,但我认为这会忽略INSERT
语句中的数据并保留表中已经存在的数据。我想要反过来。
更新
澄清一下,我不想更改INSERT
声明。我想保持不变。我想以某种方式在服务器端完成工作。基本上IGNORE_DUP_KEY
是我想要的,除了它保留了错误的数据。
更新 2
我认为我想做的与提到的重复问题不同。我根本不想改变INSERT
声明。我想在后端使用我不知道的 SQL Server 设置来处理它,或者可能通过创建触发器来处理它。
解决方案
好的,我想我有一些有用的东西。它只是一个基本INSTEAD OF INSERT
触发器,如果表上的行已经存在,则删除该行,然后插入新行。每次向表中插入一行时都会运行此触发器。
CREATE TRIGGER TR_MY_TABLE_IN ON MY_TABLE
INSTEAD OF INSERT
AS
BEGIN
SET NOCOUNT ON;
DELETE FROM MY_TABLE WHERE ID IN (SELECT ID FROM INSERTED)
INSERT INTO MY_TABLE SELECT * FROM INSERTED
END
推荐阅读
- vba - VBA - 自动复制粘贴用户表单
- hyperledger-fabric - Hyperledger Fabric orderer 变量配置
- ios - 如何从 UILabel 中删除可选文本
- django - 如何为多个用户构建 django admin
- npm - 如何在 package.json 中安装某些依赖项
- javascript - 如何在javascript中检测字符串中不匹配/不匹配的单引号或双引号?
- sql - 在redshift数据库的表中插入一行
- php - 如何在 ionic 框架中执行 python 脚本,类似地在 php 文件中执行
- javascript - 如何使用 Javascript 写入 JSON 文件?
- python - 不确定 Python for Everyone 5.2 的这段代码有什么问题