web-dev-qa-db-ja.com

列の変更:nullからnot nullへ

複数のNULL可能な整数列を含むテーブルがあります。これはいくつかの理由で望ましくないので、すべてのnullを0に更新してからこれらの列をNOT NULLに設定することを検討しています。 nullを0に変更する以外に、データを保存する必要があります。

私は 特定のSQL構文 をカラムを変更するための/ ColumnAを "not null"に探しています。データがNULLを含まないように更新されたとします。

SQL Server 2000を使用している

1141
Karmic Coder

まず、現在のNULL値をすべて消します。

UPDATE [Table] SET [Column]=0 WHERE [Column] IS NULL

次に、テーブル定義を更新してNULLを許可しないようにします。

ALTER TABLE [Table] ALTER COLUMN [Column] INTEGER NOT NULL
1893
mdb

私は同じ問題を抱えていましたが、フィールドはデフォルトでnullになっていたので、今度はデフォルトで0にしたいと思います。それにはmdbの解の後にもう1行追加する必要がありました。

ALTER TABLE [Table] ADD CONSTRAINT [Constraint] DEFAULT 0 FOR [Column];
52
Greg Dougherty

2つのステップでそれをしなければならないでしょう:

  1. 列にNULLが含まれないようにテーブルを更新してください。
UPDATE MyTable SET MyNullableColumn = 0
WHERE MyNullableColumn IS NULL
  1. テーブルを変更して列のプロパティを変更する
ALTER TABLE MyTable
ALTER COLUMN MyNullableColumn MyNullableColumnDatatype NOT NULL
35
Ralph Wiggum

Oracle 11gでは、列属性を次のように変更できました。

ALTER TABLE tablename MODIFY columnname datatype NOT NULL;

そうでなければabatichevの答えは良さそうだった。この変更を繰り返すことはできません。少なくともSQL Developerでは、列が既にNULLではないと文句を言われています。

25
JDM

これは私のために働いた:

ALTER TABLE [Table] 
Alter COLUMN [Column] VARCHAR(50) not null;
17
Dheeraj Sam

列が一意の識別子ではない限り

UPDATE table set columnName = 0 where columnName is null

それから

テーブルを変更してフィールドをnull以外に設定し、デフォルト値の0を指定します。

16
Eppz

これはもっと簡単に見えますが、Oracle上でのみ動作します。

ALTER TABLE [Table] 
ALTER [Column] NUMBER DEFAULT 0 NOT NULL;

さらに、これを使用して、単に変更するだけでなく、列を追加することもできます。値がnullの場合、この例ではデフォルト値(0)に更新されます。

5
csomakk

私の場合、投稿された回答に問題がありました。私は次のようにしました。

ALTER TABLE table_name CHANGE COLUMN column_name column_name VARCHAR(200) NOT NULL DEFAULT '';

VARCHAR(200)を自分のデータ型に変更し、必要に応じてデフォルト値を変更します。

デフォルト値が設定されていない場合は、デフォルト値がnullになり競合が発生するため、この変更を行う際に問題が発生します。

3

FOREIGN KEY CONSTRAINT...の場合、「0」が主キーテーブルの列に存在しないと問題が発生します。その解決策は...

ステップ1:

このコードを使用してすべての制約を無効にします。

EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"

ステップ2:

RUN UPDATE COMMAND (as mentioned in above comments)
RUN ALTER COMMAND (as mentioned in above comments)

STEP3:

このコードを使用してすべての制約を有効にします。

exec sp_msforeachtable @command1="print '?'", @command2="ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"
2
sam05

JDK(OracleがサポートしているApache Derbyのディストリビューション)に含まれている作り付けのjavaDBのために、以下が私のために働きました

alter table [table name] alter column [column name] not null;
0
trooper31

例を見てみましょう。

TABLE NAME=EMPLOYEE

そして、列EMPLOYEE_NAMENOT NULLに変更します。このクエリはタスクに使用できます。

ALTER TABLE EMPLOYEE MODIFY EMPLOYEE.EMPLOYEE_NAME datatype NOT NULL;
0
Ashish Dwivedi

カラムをnullにしないでデフォルトを追加することも、SSMS GUIで実行できます。

  1. 他の人がすでに述べたように、すべての既存のデータが「NOT NULL」になるまで、「NOT NULL」を設定することはできません。

UPDATE myTable SET myColumn = 0

  1. これが完了したら、テーブルをデザインビュー(テーブルを右クリックして[デザインビュー]をクリック)にし、 Allow Nulls 列のチェックを外すことができます。

enter image description here

  1. 列が選択されたデザインビューでは、下のウィンドウに 列のプロパティ が表示され、そこにデフォルトを0に設定できます。

enter image description here

0
Tony L.