5

SQL Serverのデータを含むテーブルに列を追加する場合、その列にはNULLオプションまたはデフォルトが必要であることを理解しています。それ以外の場合、SQL Serverは新しい行を何で埋めますか?

ただし、空のテーブルにNOTNULL列を追加できない理由については迷っています。SQL2008の2つのインスタンスとSQL2005の1つのインスタンスでこれを問題なく試しました。ただし、SQL2000を使用しているお客様にはこの問題があります。これはSQL2000に関連していますか、それともオフにできるオプションですか。それがオプションであることを願いましょう。

Select @@Version

Microsoft SQL Server 2000-8.00.760(Intel X86)2002年12月17日14:22:05 Copyright(c)1988-2003 WindowsNT5.1上のMicrosoftCorporationDeveloper Edition(ビルド2600:Service Pack 3)

Select count(*) from actinv

0

ALTER TABLE [ActInv] ADD [BATCHNUMBER] NVARCHAR(50) NOT NULL

メッセージ4901、レベル16、状態1、行1 ALTER TABLEでは、nullを含むか、DEFAULT定義を指定できる列のみを追加できます。列「BATCHNUMBER」は、NULLを許可せず、DEFAULT定義を指定していないため、テーブル「ActInv」に追加できません。

4

4 に答える 4

12

SQL Server 2000は、空のテーブルをチェックしません。表示されているのは、SQLServer2005/2008の改善です。

次の2つの手順のいずれかにより、空のテーブルに対してSQLServer2000で変更が行われます。

ALTER TABLE [ActInv] ADD [BATCHNUMBER] NVARCHAR(50) NOT NULL CONSTRAINT ActInv_Temp DEFAULT 'foo'
ALTER TABLE [ActInv] DROP CONSTRAINT ActInv_Temp

行く

ALTER TABLE [ActInv] ADD [BATCHNUMBER] NVARCHAR(50) NULL 
ALTER TABLE [ActInv] ALTER COLUMN [BATCHNUMBER] NVARCHAR(50) NOT NULL 
于 2009-06-30T17:27:55.467 に答える
0

確認するための2000にアクセスできませんが、名前付きのデフォルトの列を追加して成功させ、名前付きのデフォルトを削除することはできますか?

于 2009-06-30T17:21:09.780 に答える
0

エラーメッセージは、nullを許可せず、DEFAULT定義を指定していないため、新しい列を追加できないことを示しています。

次のように、null許容でないフィールドにデフォルト値を追加する必要があります。

ALTER TABLE [ActInv] ADD [BATCHNUMBER] NVARCHAR(50) DEFAULT 'foo' NOT NULL

編集: SQL Serverの個別のインストール(2000および2005)で何をするかを正確に確認しました。テーブルが本当に空の場合、おそらく最善の解決策はテーブルをドロップ/作成することです。SQLServer2000のバグのように聞こえます。

于 2009-06-30T17:13:46.107 に答える
0

次の2つを順番に検討しましたか。

ALTER TABLE [ActInv] ADD [BATCHNUMBER] NVARCHAR(50) 
GO

ALTER TABLE [ActInv] ALTER COLUMN [BATCHNUMBER] NVARCHAR(50) NOT NULL
GO

それは2000年でもうまくいくはずだと思います(私はここに2005年しかありません)

于 2009-06-30T17:26:39.320 に答える