无法在SQL Server中向空表添加"NOT NULL"列

use*_*374 4 sql-server null ddl sql-server-2000

我知道在向包含SQL Server中的数据的表中添加列时,该列必须具有NULL选项或默认值.否则SQL Server会用新的行填充什么?

我不知道为什么我不能在空表中添加NOT NULL列.我已经在两个SQL 2008实例和一个SQL 2005实例上尝试了这个,没有任何问题.但是,使用SQL 2000的客户确实存在此问题.这是与SQL 2000相关还是可以关闭的选项.我们希望这是一个选择.

Select @@Version
Run Code Online (Sandbox Code Playgroud)

Microsoft SQL Server 2000 - 8.00.760(Intel X86)2002年12月17日14:22:05版权所有(c)1988-2003 Microsoft Corporation Developer Edition on Windows NT 5.1(Build 2600:Service Pack 3)

Select count(*) from actinv

0

ALTER TABLE [ActInv] ADD [BATCHNUMBER] NVARCHAR(50) NOT NULL
Run Code Online (Sandbox Code Playgroud)

消息4901,级别16,状态1,行1 ALTER TABLE仅允许添加可包含空值或指定了DEFAULT定义的列.列'BATCHNUMBER'无法添加到表'ActInv'中,因为它不允许空值并且不指定DEFAULT定义.

Sha*_*nce 11

SQL Server 2000不检查空表.您所看到的是SQL Server 2005/2008的改进.

以下两个步骤过程中的任何一个都将在SQL Server 2000中对空表进行更改:

ALTER TABLE [ActInv] ADD [BATCHNUMBER] NVARCHAR(50) NOT NULL CONSTRAINT ActInv_Temp DEFAULT 'foo'
ALTER TABLE [ActInv] DROP CONSTRAINT ActInv_Temp
Run Code Online (Sandbox Code Playgroud)

ALTER TABLE [ActInv] ADD [BATCHNUMBER] NVARCHAR(50) NULL 
ALTER TABLE [ActInv] ALTER COLUMN [BATCHNUMBER] NVARCHAR(50) NOT NULL 
Run Code Online (Sandbox Code Playgroud)