2012-05-15 17 views

答えて

17

あなただけのテーブルを変更するための標準的な構文を使用することができます。

ALTER TABLE some_table ALTER COLUMN some_column nvarchar(max) 

はおそらく、期待どおりに動作することを確認するために、しかし、任意のインデックスを再構築したいと思うでしょう。

2

何が起きても、常にバックアップをとるので、元の状態に戻ることができます。

varchar(max)からnvarchar(max)に変更するとデータが失われないはずです。

サイドノート:いずれかが存在した場合、プロセスは、拡張文字を変換しなければならないとして、あなたはvarchar(max)に他の方向nvarchar(max)に変更された場合は、懸念を持っているかもしれません。

7

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

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

今、あなたは波/バッチ/取引のデータを更新する代わりに、に変更を適用することができます1つの長いトランザクションでテーブル全体。データがコピーされたことを確認したら、古い列を削除して新しい列の名前を変更し、影響を受けるインデックスを再作成することができます(MAX列はインデックスのキーにはありませんが、誤ってそれをINCLUDEの定義に入れます - そうであれば、とにかくそれに疑問を呈してください)。

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

+0

非常に良い点+1 – RThomas

関連する問題