varchar列の最大長を変更しますか?


188

内容を失わずに、varchar列の長さを255文字から500文字に更新しようとしています。以前にテーブルを削除して再作成したことがありますが、これを行うために使用する必要があると私が信じているalterステートメントに触れたことはありません。私はここにドキュメントを見つけました:ALTER TABLE(Transfact-SQL)しかし、それの表と裏を作ることはできません。

私はこれまでに以下のものを持っています(基本的に残念ながら何もありません):

alter table [progennet_dev].PROGEN.LE
alter column UR_VALUE_3

これにどのように取り組みますか?このステートメントの優れたドキュメントはありますか(例のステートメントをいくつか検索しましたが、空になりました)?

回答:


361

あなたは必要です

ALTER TABLE YourTable ALTER COLUMN YourColumn <<new_datatype>> [NULL | NOT NULL]

ただしNOT NULL、必要に応じて、明示的に指定することを忘れないでください。

ALTER TABLE YourTable ALTER COLUMN YourColumn VARCHAR (500) NOT NULL;

以下のように指定しない場合...

ALTER TABLE YourTable ALTER COLUMN YourColumn VARCHAR (500);

その場合、列は最初はとして定義されていても、デフォルトでnullを許可しますNOT NULL。つまり、指定を省略するALTER TABLE ... ALTER COLUMNと常に扱われます。

ALTER TABLE YourTable ALTER COLUMN YourColumn VARCHAR (500) NULL;

この動作は、でALTER TABLE(またはCREATE TABLE同時に)作成された新しい列に使用される動作とは異なります。デフォルトのnull入力可能性はANSI_NULL_DFLT設定によって異なります。


ここに「[NOT] NULL」を追加する目的を説明できますか?ちょうどあなたの答えがこれがミッチではなかったのはなぜ好奇心が強いですか?
マイケルA


したがって、[NOT NULL]は、列にNULL値を配置できないことを指定しますか?
Michael A

3
@Michael-角括弧なしで、はい。角括弧は、構文のビットがオプションであることを示します。省略した場合NULL、デフォルトで許可されます。
マーティン・スミス

1
ソートされます:) .. ALTER COLUMN MY_COL SET DATA TYPE VARCHAR(100)
Kdean571

26

列のサイズを増やしてALTERもデータは失われません。

alter table [progennet_dev].PROGEN.LE 
    alter column UR_VALUE_3 varchar(500) 

@Martinが指摘するように、明示的に指定することを忘れないでください NULL | NOT NULL


14

使用できますmodify

ALTER TABLE `table name` 
modify COLUMN `column name` varchar("length");

4
それはすでに投稿されたものです。共有したい新しいことはありますか?
Nico Haase

また、それは、MySQLで動作し、それが間違った場所にありますので、この質問は、[TSQL]タグ付けされている
ジャン=

6
MODIFYは新機能です。ALTER COLUMNは構文エラーを出しましたが、MODIFY COLUMNは問題なく動作しました。
KGBird 2018

@KGBird-SQL Serverを使用していないため。MODIFY質問に関するもの以外のデータベースシステムの構文です
Martin Smith

1

マリア-DBやIntelliJの内部DB-Navigatorツールを使用して、MODIFY列がするのではなく、私のために働いアルターコラム


2
この投稿は、@ Mitch Wheatが2012年1月12日に1:37に提供した回答に何を追加しますか?
scopchanov 2018

1
ALTER TABLE TABLE_NAME MODIFY COLUMN_NAME VARCHAR(40);

質問に遅れましたが、私はOracle SQL Developerを使用しており、@ anonymousの回答が最も近いですが、これにクエリを編集するまで構文エラーを受け取り続けました。

これが誰かを助けることを願っています


(alterを変更して変更し、column_nameを列として定義する必要はありません)
Jedo

0

私も疑いを持っていました、私のために働いたのは

ALTER TABLE `your_table` CHANGE `property` `property` 
VARCHAR(whatever_you_want) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL;  

0

これは私にとってdb2でうまくいきました:

alter table "JOBS"  alter column "JOB_TITLE" set  data type varchar(30);

0

別の方法として、古いデータを保存し、新しいパラメーターで新しいテーブルを作成できます。

画像を見る

SQL Server Management Studioの場合:「データベース」=>タスク=> generatescripts =>特定のデータベースオブジェクトを選択=>「テーブル」=>詳細=>スクリプト化するデータのタイプ-スキーマとデータ=>生成

個人的にはそうしました。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.