SQL Server 2008を使用していますが、約50万行のテーブルでVARCHARフィールドを(200から1200)大きくする必要があります。私が知る必要があるのは、考慮していない問題があるかどうかです。
このTSQLステートメントを使用します。
ALTER TABLE MyTable
ALTER COLUMN [MyColumn] VARCHAR(1200)
私はすでにデータのコピーでそれを試しましたが、このステートメントは私が見ることのできる悪影響はありませんでした。
だから、これを行うことで、私が考慮していなかった可能性のある問題はありますか?
ちなみに、列はインデックス付けされていません。
これはメタデータの変更のみです。迅速です。
観察:SET ANSI_xx設定の1つが異なる場合に「事故」を避けるために、明示的にNULLまたはNOT NULLを指定します。たとえば、何らかの理由でSSMSではなくosqlで実行します
私はこの質問をグーグルで検索したので、2セントを追加したかったのですが、私は同じような状況にありました...
BE AWAREvarchar(xxx)
からvarchar(yyy)
への変更中は実際にメタデータの変更ですが、varchar(max)
への変更はそうではありません。 varchar(max)
の値(別名BLOB値-イメージ/テキストなど)は、テーブルの行ではなく、「行外」のディスクに異なる方法で格納されるためです。そのため、サーバーは大きなテーブルで動作しなくなり、数分(数時間)応答しなくなります。
--no downtime
ALTER TABLE MyTable ALTER COLUMN [MyColumn] VARCHAR(1200)
--huge downtime
ALTER TABLE MyTable ALTER COLUMN [MyColumn] VARCHAR(max)
PS。 nvarchar
またはコースにも同じことが当てはまります。
Varchar(200)からVarchar(1200)に変更しても、メタデータの変更に過ぎないため、問題は発生しません。SQLServer 2008では過度の空白が切り捨てられるため、パフォーマンスの違いも見られないので、要するに変化する。
列をvarchar(max)に変換しないようにする別の理由は、varchar(max)列にインデックスを作成できないためです。