【问题标题】:update rows and ignore the one that causes primary key constraint?更新行并忽略导致主键约束的行?
【发布时间】:2016-08-04 17:35:05
【问题描述】:

我有一个具有以下约束定义的表。

CONSTRAINT [PK_TempItemTable_1] PRIMARY KEY CLUSTERED 
(
   [A] ASC,
   [B] ASC,
   [D] ASC,
   [D] ASC,
   [E] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]

我正在尝试用值(大约 9000 多行)更新 D 列;由于更新值,约束错误到达,因为我想将某些值更新到 D 中。

违反主键约束“PK_TempItemTable_1”。无法在对象“dbo.TempItemTable”中插入重复键。

有没有办法让我编写 MS SQL 语句,让我更新所有其他行并忽略会导致此主键约束的行?

谢谢

【问题讨论】:

  • 您可以发布您尝试过但不起作用的代码吗?基本上,您需要从更新语句中排除 PK 值已经存在的行

标签: sql sql-server database


【解决方案1】:

两个选项..

1.使用IGNORE_DUP_KEY = ON创建约束,然后删除重复项并重新设置约束。

2. 主键是从 A 到 E 的列的组合,请检查,因此不确定仅检查 d 会有什么帮助,但在不知道示例模式的情况下,我可以说,这将排除表中存在的所有值你要更新了

update mt
set d=dup.d
from
maintable t
join
ninetythousandtable dup
on dup.d<>t.d

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-12
    • 1970-01-01
    • 1970-01-01
    • 2021-04-02
    • 1970-01-01
    • 1970-01-01
    • 2011-05-15
    • 1970-01-01
    相关资源
    最近更新 更多