88

私は SQL Server 2008 を使用しており、約 50 万行のテーブルで VARCHAR フィールドを (200 から 1200 に) 大きくする必要があります。私が知る必要があるのは、私が考慮していない問題があるかどうかです.

この TSQL ステートメントを使用します。

ALTER TABLE MyTable
ALTER COLUMN [MyColumn] VARCHAR(1200)

私はすでにデータのコピーでそれを試しましたが、このステートメントによる悪影響は見られませんでした。

それで、私が考えていなかったかもしれないこれを行うことからの可能性のある問題はありますか?

ちなみに、列にはインデックスがありません。

4

5 に答える 5

60

これはメタデータの変更のみです。迅速です。

観察: SET ANSI_xx 設定の 1 つが異なる場合、たとえば何らかの理由で SSMS ではなく osql で実行する場合、「事故」を避けるために NULL または NOT NULL を明示的に指定します。

于 2011-09-22T10:53:16.800 に答える
13

私はこの質問b / cをグーグルで検索したので、2セントを追加したかっただけで、同様の状況に陥っていました...

からvarchar(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またはコースも同様です。

于 2016-12-06T16:23:23.620 に答える
4

Varchar(200)からVarchar(1200)に変更しても、メタデータの変更のみであり、SQL Server 2008が過剰な空白スペースを切り捨てるため、パフォーマンスの違いも見られないため、問題は発生しません。つまり、変化する。

于 2011-09-22T16:08:50.673 に答える
-3

私の場合、列の変更が機能していなかったため、次のような「変更」コマンドを使用できます。

alter table [table_name] MODIFY column [column_name] varchar(1200);

于 2014-11-27T08:59:40.337 に答える