SQL Server 2008 テーブルのデータ型を varchar(max) から nvarchar(max) に変更する必要があります。このテーブルにはデータが含まれています。データを失わずにデータ型を変更する方法はありますか?
4 に答える
標準の構文を使用して、テーブルを変更できます。
ALTER TABLE some_table ALTER COLUMN some_column nvarchar(max)
ただし、インデックスが期待どおりに機能することを確認するために、インデックスを再構築することをお勧めします。
ALTER COLUMN
混乱を最小限に抑えるための別のオプション (オンラインで発生するとは思わないため) は、次のとおりです。
ALTER TABLE dbo.table ADD new_column NVARCHAR(MAX); -- metadata operation
1 つの長いトランザクションでテーブル全体に変更を適用する代わりに、ウェーブ/バッチ/トランザクションでデータを更新できるようになりました。データがコピーされたことに満足したら、古い列を削除し、新しい列の名前を変更して、影響を受けるインデックスを再作成できます (MAX 列をどのインデックスのキーにも入れることはできませんが、うっかり INCLUDE 定義に入れてしまった可能性があります。
すべてのインデックスを再構築して、現在使用されていない領域を再利用する必要があります (Enterprise Edition を使用している場合はオンラインで実行できます)。
いつでもバックアップを取って、何が起こっても元の状態に戻れるようにします。
varchar(max)
つまり、 からに変更してnvarchar(max)
もデータが失われることはありません。
補足: 拡張文字が存在する場合、プロセスで拡張文字を変換する必要があるため、逆方向nvarchar(max)
に変更する場合は懸念があるかもしれません 。varchar(max)