我有一个表上的两列主键。我试图改变它与此命令设置的ignore_dup_key
到:我可以为主键设置ignore_dup_key吗?
ALTER INDEX PK_mypk on MyTable
SET (IGNORE_DUP_KEY = ON);
但我得到这个错误:
Cannot use index option ignore_dup_key to alter index 'PK_mypk' as it enforces a primary or unique constraint.
否则怎么我应该设置IGNORE_DUP_KEY
上?
我的问题是这样的:我需要每天插入大量的记录,我目前正在为每条记录做插入命令。如果记录已经存在,那么它会被忽略(通过抛出一个重复的键错误)。从性能POV中,最好尝试插入并允许一些插入失败,而不是在插入之前检查记录是否存在。 提高性能的下一步是使用SqlBulkCopy为每条记录执行插入而不是单个命令。但是如果任何记录存在,如果ignore_dup_key关闭,整个批次失败,则这是不可能的。 – 2010-04-07 22:56:31
如果我的主键上的某一列是用户定义的呢?如果我需要同时支持多个实体的插入,比如说1000?如何在插入之前验证所有条目是唯一的,而不会对服务器产生严重影响?我认为在这种情况下,忽略重复选项非常合适。你不同意吗? – julealgon 2015-06-26 14:05:29
是的,如果你忽略了重复项,并且你不愿意,你就不会主键;如果你是主键,那么你最终会遇到一个带有坏数据的世界。将数据放入临时表中然后使用select语句只插入新记录是一种更好的做法。我们以这种方式插入了百万条记录。 – HLGEM 2015-06-26 15:15:49