SQL構文を使用して主キー制約を変更するにはどうすればよいですか?


100

主キー制約に列が欠落しているテーブルがあります。SQL Serverで編集する代わりに、これをスクリプトに入れて、更新スクリプトの一部として追加します。

これを行うにはどのような構文を使用できますか?キー制約を削除して再作成する必要がありますか?


5
AFAIKはい、PK制約を削除して再作成する必要があります。既存のPK / FK制約に列を追加するコマンドを思い出しません。
Seramme 2012年

回答:


149

はい。唯一の方法は、Alterテーブルを使用して制約をドロップしてから再作成することです。

ALTER TABLE <Table_Name>
DROP CONSTRAINT <constraint_name>

ALTER TABLE <Table_Name>
ADD CONSTRAINT <constraint_name> PRIMARY KEY (<Column1>,<Column2>)

11
主キー制約名がわからない場合は、ここにあるクエリを使用して検索します(または一度に検索して削除します)。http://stackoverflow.com/a/13948609/945875
Justin

それは明確ではなかった、または他の誰が同じ間違いを犯し、制約名は引用符で行くことができない場合はalter table PatientsInfo drop constraint PK__Patients__1CBB51380A338187、ここで働いている
マズロー

1
制約名を知らない人のために:ALTER TABLE dbtable DROP PRIMARY KEY、ADD PRIMARY KEY(id1id2);
karsten314159

21

PRIMARY KEY CONSTRAINT変更することはできません。削除して再度作成するだけです。大きなデータセットの場合、実行時間が長くなり、テーブルが使用できなくなる可能性があります。


3

パフォーマンスに関しては、ドロップおよび作成時に非更新されるため、非クラスター化インデックスを保持する意味はありません。大きなデータセットである場合は、テーブルの名前を変更し(可能な場合は、セキュリティ設定を変更しますか?)、正しいキーで空のテーブルを再作成し、そこにすべてのデータを移行します。このための十分なスペースがあることを確認する必要があります。


3

私の場合、主キー(column4)に列を追加します。このスクリプトを使用してcolumn4を追加しました

ALTER TABLE TableA
DROP CONSTRAINT [PK_TableA]

ALTER TABLE TableA
ADD CONSTRAINT [PK_TableA] PRIMARY KEY (
    [column1] ASC,
    [column2] ASC, 
    [column3] ASC,
    [column4] ASC
)

-4

この回答で説明されているように)sp_renameを使用して制約オブジェクトの名前を変更できます

例えば:

EXEC sp_rename N'schema.MyIOldConstraint', N'MyNewConstraint'

3
問題は、制約を変更する方法、つまり列を追加する方法であり、名前を変更する方法ではありませんでした。
Andrew Steitz、2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.