web-dev-qa-db-ja.com

SQL Serverの主キーの列の長さを変更する方法

列の長さを変更する方法は知っていますが、変更しようとしている列がPKであるためSQLステートメントが失敗し、次のエラーが発生します。

メッセージ5074、レベル16、状態1、行1
オブジェクト「PK_TableName」は列「PersonID」に依存しています。

PersonID = PK。

私は読んだ SQLサーバーのテーブル列のフィールド長を変更するSQLとは これは、非PK列にのみ適用されます。

私はこれを試しました:

ALTER TABLE table_name
ALTER COLUMN column_name <new datatype>
16
LearnByReading

プライマリ列のサイズを大きくする方法の例を以下に示します

  1. サンプルテーブルを作成する

    create table abc (id varchar(10) primary key)

  2. 主要な制約テーブルで一次制約を見つける

    select object_name(object_id),* from sys.key_constraints where object_name(parent_object_id) = 'abc

  3. 制約を削除

    _ALTER TABLE abc DROP CONSTRAINT PK__abc__3213E83F74EAC69B_

    (PK__abc__3213E83F74EAC69Bを受け取った制約名に置き換えます。)

  4. 非ヌルを追加

    ALTER TABLE abc alter column id varchar(20) NOT NULL;

  5. 主キーを再度追加

    ALTER TABLE abc ADD CONSTRAINT MyPrimaryKey PRIMARY KEY (id)

21
ALTER TABLE <Table_Name>
DROP CONSTRAINT <constraint_name>

ALTER TABLE table_name
ALTER COLUMN column_name datatype

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

SQLServer 2008ではデータで主キーを変更できなかったため、すべての制約を非アクティブ化し、コマンドを実行して、すべての制約を再度アクティブ化しました。コマンドは次のとおりです。

EXEC sp_MSforeachtable @command1="ALTER TABLE ? NOCHECK CONSTRAINT ALL"

-- commands here

EXEC sp_MSforeachtable @command1="ALTER TABLE ? CHECK CONSTRAINT ALL"
0
Wendel