Mr.*_*ble 35 sql t-sql sql-server database-design sql-server-2008
我在桌子上有一个双列主键.我试图改变它以ignore_dup_key使用此命令将其设置为on:
ALTER INDEX PK_mypk on MyTable
SET (IGNORE_DUP_KEY = ON);
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误:
Cannot use index option ignore_dup_key to alter index 'PK_mypk' as it enforces a primary or unique constraint.
我该怎么IGNORE_DUP_KEY办?
Kva*_*asi 59
ALTER TABLE [TableName] REBUILD WITH (IGNORE_DUP_KEY = ON)
Run Code Online (Sandbox Code Playgroud)
Bra*_*adC 25
它没有记录在联机丛书中,但我发现虽然这对主键有效,但你不能用ALTER INDEX改变它,你必须删除并重新创建主键.
请记住,此标志不允许您实际存储重复的行,它只是更改导致的错误:
ON
A warning message will occur when duplicate key values are inserted into a unique
index. Only the rows violating the uniqueness constraint will fail.
OFF
An error message will occur when duplicate key values are inserted into a
unique index. The entire INSERT operation will be rolled back.
Run Code Online (Sandbox Code Playgroud)
来自http://msdn.microsoft.com/en-us/library/ms175132.aspx
小智 8
删除 PK,然后重新创建它
ALTER TABLE TableName DROP CONSTRAINT PK_TableName
GO
ALTER TABLE TableName ADD CONSTRAINT PK_TableName PRIMARY KEY CLUSTERED
( MyIDColumn ASC )
WITH (IGNORE_DUP_KEY = ON) ON [PRIMARY]
GO
Run Code Online (Sandbox Code Playgroud)
参见 -> https://eitanblumin.com/2018/10/28/the-ignore_dup_key-option-in-primary-keys-and-unique-indexes/
它决定了仅插入重复项时会发生什么
指定当插入操作尝试将重复键值插入到唯一索引时的错误响应。IGNORE_DUP_KEY 选项仅适用于创建或重建索引后的插入操作。该选项在执行 CREATE INDEX、ALTER INDEX 或 UPDATE 时无效。
..并且它不适用于PK
ALTER TABLE 的 BOL 注释关于此和“向后兼容性”有点令人困惑。我刚刚尝试了一下,BradC 是正确的。
CREATE TABLE dbo.foo (bar int PRIMARY KEY WITH (FILLFACTOR=90, IGNORE_DUP_KEY = ON))
GO
INSERT dbo.foo VALUES (1)
GO
INSERT dbo.foo VALUES (1)
GO
--gives
(1 row(s) affected)
Duplicate key was ignored.
(0 row(s) affected)
Run Code Online (Sandbox Code Playgroud)