SQL Server 2008中不能删除约束(SQL Server 2008 cannot drop

2019-09-23 06:56发布

我试图使用以下从表中删除主键约束

ALTER TABLE SchemaName.LabourGrade DROP CONSTRAINT Labour_Grade_pk

并且收到错误Labour_Grade_pk is not a constraint.

当我做

SELECT * FROM sysobjects WHERE name = 'LabourGrade_pk'

我得到一个行回来。 它确实有FKS到它,所以我尝试下探的第一,但同样的问题。 我只想砸PK,从而改变列的数据类型,有没有更好的方式来做到这一点?

Answer 1:

我只想砸PK,从而改变列的数据类型,有没有更好的方式来做到这一点?

是的,你不需要为此不惜一切删除并重新创建PK(以及相关的指数(ES))。 你可以这样做是通过一个简单的数据改变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


Answer 2:

如果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

但是,这并没有解决,为什么你需要删除此约束,按照其他评论和@马丁的回答。



文章来源: SQL Server 2008 cannot drop constraint