4

I'm trying to drop a primary key constraint from a table using the following

ALTER TABLE SchemaName.LabourGrade DROP CONSTRAINT Labour_Grade_pk

and getting the error Labour_Grade_pk is not a constraint.

when I do

SELECT * FROM sysobjects WHERE name = 'LabourGrade_pk'

I get one row back. It does have FKs to it so I tried dropping those first but same problem. I only want to drop the PK so as to change the column's datatype, is there better way to do this?

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 に答える