如何以编程方式禁用主键约束?

Tom*_*ski 6 t-sql sql-server sql-server-2005

我的MS SQL Server 2005表中有一个主键表.我想禁用它.现在我收到错误:

违反PRIMARY KEY约束'PK_Name'.无法在对象'dbo.Table'中插入重复键.

我希望不会发生此错误,并且与没有约束的普通列一样使用PRIMARY KEY,并且在对其进行更改后恢复此约束.如何禁用此约束?

我希望在PRIMARY KEY约束被禁用时执行的查询很复杂并且更改主键列中的值.在此查询的某些点上,当主键列中存在重复值时,它会遇到这种情况.但在我的查询结束时,我的所有值都是唯一的.

我对这个约束知之甚少,因为我不是这个表的设计者.我有它的名字,但我现在不知道它是否已经聚集等等(这个专栏的配置是什么).

Qua*_*noi 18

ALTER TABLE mytable DROP CONSTRAINT PK_Name
Run Code Online (Sandbox Code Playgroud)

重新启用它:

ALTER TABLE mytable ADD CONSTRAINT PK_Name PRIMARY KEY /* CLUSTERED */ (pk_column)
Run Code Online (Sandbox Code Playgroud)

CLUSTERED如果您希望PRIMARY KEY将其聚类(即表行本身正在订购),请取消注释

要确定是否PRIMARY KEY聚集在一起,请发出:

EXEC sp_help 'mytable'
Run Code Online (Sandbox Code Playgroud)

并查看6th返回的结果集.


duf*_*ymo 6

没有主键的关系表是一件非常糟糕的事情.每一行必须以某种方式独特.如果没有候选键被指定为主键,则整行必须是唯一的.

我不确定为什么你必须删除一个主键约束,但我会考虑这样做而不用其他候选键替换它是一个应该被调查的红旗.

  • 您可能想要删除约束的一个原因是您要对大量数据执行表更改.我们最近在一个包含8 Mil记录的表中添加了两个新列.添加列需要23小时.如果我们放弃约束,则需要12分钟.当然,我们正在谈论离线升级.如果是在线升级,则放弃约束将是危险的. (3认同)