SQL Serverで列のデータ型をどのように変更しますか?


回答:


564
ALTER TABLE TableName 
ALTER COLUMN ColumnName NVARCHAR(200) [NULL | NOT NULL]

編集 前述のようにNULL / NOT NULLが指定されているはずです。Robの回答も参照してください。


1
なぜそれを指定する必要があるのですか?メリットは何ですか?私が残したいものはすべてそのままにしておく必要はないと思います。
驚異的なJan

5
@TheincredibleJanかっこいいですが、残念ながらそのようには動作しません。でALTER TABLE TableName ALTER COLUMN ColumnNameある既存の列を変更するコマンドを発行[NOT NULL]し、それを明示的に指定しない場合、それが[NULL]デフォルトであるため、後でそれが行われます。
takrl

4
これは、その列に制約とインデックスがない場合にのみ機能します。それ以外の場合は、すべてを削除して再作成する必要があります。これは、特にその列に多くの外部参照がある場合、面倒で面倒な作業です。たとえば、tinyintからintに変更する場合。
Hrvoje Batrnek

IDEを開いている場合は注意してください(SSMSなど)。テーブルで[デザイナー]タブを閉じていても、変更を行っていました(スクリプトを実行し、テーブルを右クリックして[デザイン]を選択した後)、古いデータ型が表示されました!Management Studioですべてのタブを閉じ、デザインビューを再度開いた後にのみ、最終的に更新されたDataTypeが表示されました。非常に怖いので、注意してください(キャッシュバグが現在修正されているか、1つのMSが修正することはありません)。Design-Viewを使用するときにT-SQLを実行した理由を不思議に思う人のために、DataTypesをSysName(SSMSでは許可されていない)に変更したいと考えました。
MikeTeeVee

XAMPPでこれらのコマンドを使用してもうまくいきませんでした。ALTER TABLE table MODIFY COLUMN column datatype私のために働いた。
Pavindu

173

null可能性を忘れないでください。

ALTER TABLE <schemaName>.<tableName>
ALTER COLUMN <columnName> nvarchar(200) [NULL|NOT NULL]

2
ヌル可能性の問題は何ですか?変更したくない場合、再度設定するメリットは何ですか?
驚くべきJan

7
^何であるかを明示的に定義せずに、alter tableステートメントが実行を終了すると、デフォルトでNULLになります。
sc305495 2017

1
@ sc305495正確には、デフォルトでANSI_NULL_DEFAULTの設定が使用されます。
Zikato


13

SQL Server(Transact-SQL)の既存のテーブルの列を変更する構文は次のとおりです。

ALTER TABLE table_name
    ALTER COLUMN column_name column_type;

例えば:

ALTER TABLE employees
    ALTER COLUMN last_name VARCHAR(75) NOT NULL;

このSQL ServerのALTER TABLE例では、呼び出さlast_nameれた列をのデータ型に変更し、列にVARCHAR(75)null値を許可しません。

こちらをご覧ください


1
回答に情報を追加し、コード/クエリをフォーマットしてください!
Sebastian Brosch 2015年

4

varcharのサイズを増やしている限り、問題ありません。変更テーブルのリファレンスに従って:

列の精度またはスケールを下げると、データが切り捨てられる場合があります。



1
ALTER TABLE [dbo].[TableName]
ALTER COLUMN ColumnName VARCHAR(Max) NULL

これは何年も前の既存の受け入れられた回答に何も追加しないようであり、また、テーブル構造に投稿した変更は実際には質問と一致しません。
PeterJ

-11

これを試して:

ALTER TABLE "table_name"
MODIFY "column_name" "New Data Type";

1
「修正」は明らかに正しくありません。他の回答と比較してください。
Frank

3
これは古いですが、Kai TzerがMySqlやOracle DDLを証明していたようです。
シェルドンコーエン

1
シェルドンに同意します。ここでの回答はオラクルのSQLでは
役に立ち
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.