sql-server - 从静态 INSERT 语句覆盖重复行

标签 sql-server azure-sql-database

我将使用 INSERT 语句插入行,其中的值是静态的并且不在数据库中。像这样的东西:

INSERT INTO MY_TABLE (ID, NAME) VALUES(123, 'Herbert')

如果 MY_TABLE 已经有一行 ID 等于 123NAMEHerbie ,如何将新数据保留在 INSERT 语句中(123Herbert)并丢弃 中已有的数据MY_TABLE(123Herbie)?

我知道 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/

相关文章:

sql - 如果为空,则将字段转换为位 0,如果不是,则转换为位 1

sql-server - 在 EF6 中执行复杂的原始 SQL 查询

sql-server - Visual Studio 2013 中的 SQL Server 项目

sql - 智能数据库 - 能够识别异常值

azure - SQL Azure 导出停留在挂起状态

asp.net-mvc-3 - 在 Azure 上的两个 ASP.NET MVC 3 应用程序之间共享数据库

c# - 您可以使用 SQL Azure 来实现简单的 ASP.NET 解决方案吗?

sql - 如何在 SQL Server 2008 中使用表别名编写 UPDATE SQL?

c# - EF 迁移期间未找到所需属性 "type"

Web应用程序的Azure表存储设计