4

我正在尝试使用以下方法从表中删除主键约束

ALTER TABLE SchemaName.LabourGrade DROP CONSTRAINT Labour_Grade_pk

并得到错误Labour_Grade_pk is not a constraint.

当我做

SELECT * FROM sysobjects WHERE name = 'LabourGrade_pk'

我得到一排回来。它确实有 FK,所以我尝试放弃那些第一个但同样的问题。我只想删除 PK 以更改列的数据类型,有更好的方法吗?

4

2 回答 2

4

如果SELECT * FROM sysobjects WHERE name = 'LabourGrade_pk'返回一行,那么您要使用:

ALTER TABLE SchemaName.LabourGrade DROP CONSTRAINT LabourGrade_pk

不是

ALTER TABLE SchemaName.LabourGrade DROP CONSTRAINT Labour_Grade_pk
                                                       --^-- We don't want this

但是,根据其他评论和@Martin 的回答,这并不能解决您需要放弃此约束的原因。

于 2012-10-01T10:23:54.780 回答
3

我只想删除 PK 以更改列的数据类型,有更好的方法吗?

是的,您根本不需要为此删除并重新创建 PK(以及相关的索引)。您可以通过ALTER TABLE ... ALTER COLUMN.

CREATE TABLE #T
(
P VARCHAR(2) PRIMARY KEY
)      

INSERT INTO #T VALUES ('AA')  

ALTER TABLE #T ALTER COLUMN P VARCHAR(3) NOT NULL

DROP TABLE #T
于 2012-10-01T10:21:06.027 回答