56

テーブルを削除して再作成することなくvarchar(255)、SQL Server 2008 データベースの列の型を から に変更することはできますか?varchar(MAX)

SQL Server Management Studio は、それを使用して実行しようとするたびにエラーをスローしますが、頭痛の種を避けるために、DROP と CREATE を使用せずに型を変更できるかどうかを知っておくとよいでしょう。

ありがとう

4

3 に答える 3

97

TSQL を使用して実行できるはずです。

何かのようなもの

ALTER TABLE [table] ALTER COLUMN [column] VARCHAR(MAX)
于 2010-04-23T03:18:39.433 に答える
15

「変更の保存は許可されていません。行った変更により、次のテーブルを削除して再作成する必要があります。再作成できないテーブルに変更を加えたか、[テーブルの再作成が必要な変更を保存しない] オプションを有効にしました。オプション「変更の保存を禁止する」が有効になっていません..

これは、既定で有効になっている SQL Server Management Studio 2008 の新しい "機能" です。大きな変更を加えるたびに、SSMS は、新しいテーブルを作成してから古いテーブルからデータを移動することによってのみ、テーブルを再作成できます。すべてバックグラウンドで行われます (これらの変更には、特に列の並べ替えが含まれます)。

テーブルに FK 制約などがある場合、この方法でテーブルをやり直すと失敗する可能性があるため、このオプションはデフォルトでオフになっています。しかし、あなたは間違いなくその機能をオンにすることができます!

代替テキスト

それは下にTools > Optionsあり、そのオプションをオフにすると、テーブル デザイナーでテーブル構造にこれらの種類の変更を再度行うことができます。

于 2010-04-23T05:09:40.457 に答える
2


次のようなことに注意してください

ALTER TABLE [table] ALTER COLUMN [column] VARCHAR(MAX)

https://dba.stackexchange.com/questions/15007/change-length-of-varchar-on-live-prod-table

マーティン・スミスの回答:

それを増やしている場合varchar(100 - 8000)(つまりvarchar(max))、SSMS GUIではなくTSQLを介してこれを行っている以外のもの)

ALTER TABLE YourTable ALTER COLUMN YourCol varchar(200) [NOT] NULL
列の null 可能性を to から変更しないNULL(NOT NULLこれにより、すべての行が検証され、場合によっては to または NOT NULLtoNULLに書き込まれる可能性がある間、テーブルがロックされます。これは、メタデータのみの迅速な変更です。テーブルのロックを待つ必要があるかもしれませんがSCH-M、一度注意すべき点の 1 つは、SCH-Mロックを待機している間は、キューを先行してジャンプするのではなく、他のクエリがブロックされることですSET LOCK_TIMEOUT。それが元の列の状態であるかどうかALTER TABLEを明示的に指定するステートメントで確認してください。それ以外の場合、列は allow に変更されます。NOT NULLNULL

于 2015-11-25T09:56:37.883 に答える