据我所知,在向包含SQL Server中的数据的表中添加列时,该列必须具有NULL选项或默认值。否则SQL Server会用新的行填充什么?
我不知道为什么我不能在空表中添加NOT NULL列。我已经在两个SQL 2008实例和一个SQL 2005实例上尝试了这个,没有任何问题。但是,使用SQL 2000的客户确实存在此问题。这是与SQL 2000相关还是可以关闭的选项。我们希望这是一个选择。
Select @@Version
Microsoft SQL Server 2000 - 8.00.760(Intel X86)2002年12月17日14:22:05 版权所有(c)1988-2003 Windows上的Microsoft Corporation Developer Edition NT 5.1(Build 2600:Service Pack 3)
Select count(*) from actinv
0
ALTER TABLE [ActInv] ADD [BATCHNUMBER] NVARCHAR(50) NOT NULL
Msg 4901,Level 16,State 1,Line 1 ALTER TABLE仅允许添加可包含空值或具有空值的列 指定了DEFAULT定义。无法将“BATCHNUMBER”列添加到表中 'ActInv'因为它不允许空值而且没有指定DEFAULT 定义
答案 0 :(得分: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
去
ALTER TABLE [ActInv] ADD [BATCHNUMBER] NVARCHAR(50) NULL
ALTER TABLE [ActInv] ALTER COLUMN [BATCHNUMBER] NVARCHAR(50) NOT NULL
答案 1 :(得分:0)
错误消息告诉您无法添加新列,因为它不允许空值,而未指定DEFAULT定义。
您需要向非可空字段添加默认值,如下所示:
ALTER TABLE [ActInv] ADD [BATCHNUMBER] NVARCHAR(50) DEFAULT 'foo' NOT NULL
编辑:我刚刚看到您在单独的SQL Server安装(2000和2005)上所做的工作。如果表真的是空的,也许最好的解决方案是删除/创建表。这听起来像是SQL Server 2000中的一个错误。
答案 2 :(得分:0)
我无法访问2000进行验证,但是您是否可以添加具有命名默认值的列,以便它成功,然后只删除命名的默认值?
答案 3 :(得分:0)
您是否按顺序考虑了以下2个:
ALTER TABLE [ActInv] ADD [BATCHNUMBER] NVARCHAR(50)
GO
ALTER TABLE [ActInv] ALTER COLUMN [BATCHNUMBER] NVARCHAR(50) NOT NULL
GO
我认为这应该也适用于2000年(我这里只有2005年)