列の長さを変更する方法は知っていますが、変更しようとしている列がPKであるためSQLステートメントが失敗し、次のエラーが発生します。
メッセージ5074、レベル16、状態1、行1
オブジェクト「PK_TableName」は列「PersonID」に依存しています。
PersonID = PK。
私は読んだ SQLサーバーのテーブル列のフィールド長を変更するSQLとは これは、非PK列にのみ適用されます。
私はこれを試しました:
ALTER TABLE table_name
ALTER COLUMN column_name <new datatype>
プライマリ列のサイズを大きくする方法の例を以下に示します
サンプルテーブルを作成する
create table abc (id varchar(10) primary key)
主要な制約テーブルで一次制約を見つける
select object_name(object_id),* from sys.key_constraints where object_name(parent_object_id) = 'abc
制約を削除
_ALTER TABLE abc DROP CONSTRAINT PK__abc__3213E83F74EAC69B
_
(PK__abc__3213E83F74EAC69Bを受け取った制約名に置き換えます。)
非ヌルを追加
ALTER TABLE abc alter column id varchar(20) NOT NULL;
主キーを再度追加
ALTER TABLE abc ADD CONSTRAINT MyPrimaryKey PRIMARY KEY (id)
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>)
SQLServer 2008ではデータで主キーを変更できなかったため、すべての制約を非アクティブ化し、コマンドを実行して、すべての制約を再度アクティブ化しました。コマンドは次のとおりです。
EXEC sp_MSforeachtable @command1="ALTER TABLE ? NOCHECK CONSTRAINT ALL"
-- commands here
EXEC sp_MSforeachtable @command1="ALTER TABLE ? CHECK CONSTRAINT ALL"