【问题标题】:IGNORE_DUP_KEY option in SQL ServerSQL Server 中的 IGNORE_DUP_KEY 选项
【发布时间】:2009-03-27 14:16:44
【问题描述】:

我在 MSDN 和 Google 上进行了相当多的搜索,但看起来 IGNORE_DUP_KEY 选项的描述非常有限。

我的困惑,

  1. IGNORE_DUP_KEY 选项是否是列的选项?一张桌子?几列?对于索引(使索引唯一)?

  2. 如果将 IGNORE_DUP_KEY 设置为 Yes,当插入一批具有重复键的记录(使用批量插入 WriteToServer ADO.Net 函数)时(例如,我插入一些数据库中已经存在的值),SQL Server 不会抛出错误。批处理作业将成功完成,但不会插入重复的行。将插入所有其他行,SQL Server 将其视为作业成功。我的理解正确吗?

提前致谢, 乔治

【问题讨论】:

  • 查看我的回答中的评论;此索引选项的影响是允许插入所有唯一值并忽略(带有警告)中止失败,因为存在重复。未插入副本。如果您插入一个 dup,它仍然不会包含在表中(请参阅我的第一个项目符号)

标签: sql-server ado.net unique


【解决方案1】:

IGNORE_DUP_KEY 是 CREATE INDEX 的一个选项,只影响多行的插入:

IGNORE_DUP_KEY = 开启

  • 插入所有唯一行,发出警告,不插入重复行

IGNORE_DUP_KEY = 关闭

  • 发出错误,未插入任何行

【讨论】:

  • 默认为 IGNORE_DUP_KEY = OFF
  • @mike,我不同意——“只影响多行的插入”。我认为即使插入单行(非批量插入),IGNORE_DUP_KEY 选项仍然有效。有cmets吗?
  • 来自我的“CREATE INDEX (Transact-SQL)”在线帮助:IGNORE_DUP_KEY = { ON | OFF } 指定对唯一聚集索引或唯一非聚集索引的多行插入操作中重复键值的错误响应。默认为关闭。
【解决方案2】:
  1. IGNORE_DUP_KEY 用于给定的唯一索引。

  2. “取消后,任何当时处于活动状态的事务都可以继续,就像从未发生过更新或插入一样。正常插入非重复键。”所以是的,批量插入会报告成功。

【讨论】:

  • @Matt,如果设置 IGNORE_DUP_KEY = ON,任何知道是否插入行的方法(我有这个问题,因为我的目的是只插入不存在的行,对于现有的行,我想保留旧值但获得某种形式的反馈信息)? (继续。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-03
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多