2014-01-08 37 views
5

私はプライマリキー 'username'と 'Char'のテーブルを持っており、それをvarcharに変更する必要があります。 データを失うことなくこれを行う方法がありますか? は主キーで、他のすべてのテーブルをカスケードします。SQL ServerのCharからVarcharへの列タイプの変更

ありがとうございました。この列は、多くの他のテーブルで参照されますテーブルの上ご主キーであれば、それはもう少し複雑になります

答えて

4
ALTER TABLE table_name -<-- Your Table Name 
ALTER COLUMN username VARCHAR(50) NOT NULL 
+0

こんにちは、ありがとうございましたが、私は他のテーブルにこのリンクがあると書いています。このSQLコードを実行できません。エラーが発生します。 オブジェクト 'X'は、 'username'列に依存しています。 オブジェクト 'X'は列 'username'に依存しています。 1つ以上のオブジェクトがこの列にアクセスしたため、ALTER TABLE ALTER COLUMN usernameが失敗しました。 – user2097810

+0

その場合、データ型を変更することはできません。外部キー制約を削除し、制約の列を解放してからデータ型を変更し、再度制約を作成する必要があります。この列を参照するすべてのテーブルの列 –

5

  1. は、すべてのすべての外部キー制約をドロップ主キー
  2. があなたのテーブル
  3. 変更あなたの列のデータ型に主キー制約を削除することを参照する他のテーブル(ALTER TABLE .... ALTER COLUMN ..... VARCHAR(n) NOT NULL
  4. 主キー制約
  5. 変更
  6. に他のすべてのテーブルからすべての外部キー関係を再確立同じデータ型にすべての単一の参照テーブル内のすべての単一の外部キー列のデータ型を再作成します新しく作成されたVARCHAR(n)主キー列
+1

誰もがテーブル拘束とデータ型の任意のセットのためにこのダンスを行う一般的なボイラープレートを持っていますか?手で行う痛みのように聞こえる。 – ggb667

関連する問題