我试图使用以下从表中删除主键约束
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,从而改变列的数据类型,有没有更好的方式来做到这一点?
我只想砸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
如果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
但是,这并没有解决,为什么你需要删除此约束,按照其他评论和@马丁的回答。