13

SQL Server 2008 テーブルのデータ型を varchar(max) から nvarchar(max) に変更する必要があります。このテーブルにはデータが含まれています。データを失わずにデータ型を変更する方法はありますか?

4

4 に答える 4

17

標準の構文を使用して、テーブルを変更できます。

ALTER TABLE some_table ALTER COLUMN some_column nvarchar(max)

ただし、インデックスが期待どおりに機能することを確認するために、インデックスを再構築することをお勧めします。

于 2012-05-15T20:28:09.760 に答える
7

ALTER COLUMN混乱を最小限に抑えるための別のオプション (オンラインで発生するとは思わないため) は、次のとおりです。

ALTER TABLE dbo.table ADD new_column NVARCHAR(MAX); -- metadata operation

1 つの長いトランザクションでテーブル全体に変更を適用する代わりに、ウェーブ/バッチ/トランザクションでデータを更新できるようになりました。データがコピーされたことに満足したら、古い列を削除し、新しい列の名前を変更して、影響を受けるインデックスを再作成できます (MAX 列をどのインデックスのキーにも入れることはできませんが、うっかり INCLUDE 定義に入れてしまった可能性があります。

すべてのインデックスを再構築して、現在使用されていない領域を再利用する必要があります (Enterprise Edition を使用している場合はオンラインで実行できます)。

于 2012-05-15T20:33:01.347 に答える
2

いつでもバックアップを取って、何が起こっても元の状態に戻れるようにします。

varchar(max)つまり、 からに変更してnvarchar(max)もデータが失われることはありません。

補足: 拡張文字が存在する場合、プロセスで拡張文字を変換する必要があるため、逆方向nvarchar(max)に変更する場合は懸念があるかもしれません 。varchar(max)

于 2012-05-15T20:31:53.797 に答える