2016-12-01 13 views
2

異なるテーブルでINTからBIGINTに列を変更する必要がある状況があります。問題は、これらのテーブルの中に制約、インデックス、キー、データがあることです。それらのいくつかは互いに関連しています。 私はこの仕事を行うための一連の手順を作成しました。私はあなたの意見に感謝します。異なるテーブルの列をINTからBIGINTに変更する

  1. 表の列を特定します。 SELECT SCHEMA_NAME(schema_id)AS schema_name、t.name ASテーブル名、c.name ASカラム名FROM sys.tables AS内部メンバーsys.columns c ON t.OBJECT_ID = c.OBJECT_ID WHERE 1 = 1 AND c.name LIKE ' %columnname% 'ORDER BY schema_name、table_name;

  2. テーブルを選択し、各制約、キー、およびインデックスを作成してドロップするスクリプトを生成します。

  3. 選択したテーブルと同じ構造の新しいテーブルを作成しますが、目的の列はINTではなくBIGINTとして作成します。

  4. 古いテーブルの行を新しいテーブルに挿入します。

  5. 古いテーブルの制約、キー、およびインデックスごとにDROPスクリプトを実行します。

  6. 古いテーブルのすべての行を削除します。

  7. INTからBIGINTに変更するには、古いテーブルを変更します。

  8. 古いテーブルの各制約、キー、およびインデックスに対してCREATEスクリプトを実行します。

  9. 新しいテーブルの行を古いテーブルに挿入します。

  10. 手順2に進み、別のテーブルを選択して繰り返します。

これは良い計画だと思いますか?私はバックアップ計画のための推薦もありがとう。

答えて

1

なぜカラムのデータ型を変更するだけではないのですか? INT -> BIGINT

ALTER TABLE dbo.yourTable 
    ALTER COLUMN yourColumnName BIGINT 
+0

表はそれにいくつかの制約、データとインデックスを持っているすべての問題になるはずの変換、私は単にデータ型を変更傾けます。 – Liohn

+0

どのような制約が問題になっていますか? INTまたはBIGINTの場合、外部キーは本当に気にしません。インデックスは問題ではないはずはなく、インデックスだけが再構築されます。 –

+0

本当ですか?既存のデータはどうなのでしょうか?それを変更するための問題ではありませんか? – Liohn

関連する問題