无法添加“NOT NULL” SQL Server 中的列到空表
据我了解,在 SQL Server 中向包含数据的表添加列时,该列必须具有 NULL 选项或默认值。 否则 SQL Server 会用什么来填充新行呢?
但是,我不知道为什么不能将 NOT NULL 列添加到空表中。 我已在两个 SQL 2008 实例和一个 SQL 2005 实例上尝试过此操作,没有出现任何问题。 然而使用 SQL 2000 的客户确实有这个问题。 这与 SQL 2000 相关还是您可以关闭它的选项。 我们希望这是一个选择。
Select @@Version
Microsoft SQL Server 2000 - 8.00.760(英特尔 X86)2002 年 12 月 17 日 14:22:05 版权所有 (c) 1988-2003 Windows 上的 Microsoft Corporation Developer Edition NT 5.1(内部版本 2600:Service Pack 3)
Select count(*) from actinv
0
ALTER TABLE [ActInv] ADD [BATCHNUMBER] NVARCHAR(50) NOT NULL
消息 4901,级别 16,状态 1,第 1 行 ALTER TABLE 只允许添加可以包含空值或具有 指定默认定义。 列“BATCHNUMBER”无法添加到表中 'ActInv' 因为它不允许空值并且不指定 DEFAULT 定义。
I understand that when adding a column to a table containing data in SQL server, the column must have a NULL option or a default. Otherwise what would SQL Server pad the new rows with?
I am at a loss as to why I can't add a NOT NULL column to an empty table however. I have tried this on two instances of SQL 2008 and one instance of SQL 2005 with no problems. However a customer with SQL 2000 does have this problem. Is this related to SQL 2000 or is it an option you can turn off. Let's hope it's an option.
Select @@Version
Microsoft SQL Server 2000 - 8.00.760 (Intel X86) Dec 17 2002 14:22:05
Copyright (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
Msg 4901, Level 16, State 1, Line 1
ALTER TABLE only allows columns to be added that can contain nulls or have a
DEFAULT definition specified. Column 'BATCHNUMBER' cannot be added to table
'ActInv' because it does not allow nulls and does not specify a DEFAULT
definition.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
SQL Server 2000 不检查空表。 您所看到的是 SQL Server 2005/2008 中的改进。
以下两个步骤过程中的任何一个都将在 SQL Server 2000 中对空表进行更改
:
SQL Server 2000 does not check for an empty table. What you are seeing is an improvement in SQL Server 2005/2008.
Either of the following two step processes will make the change in SQL Server 2000 against an empty table:
go
我无法访问 2000 进行验证,但是您可以添加一个具有命名默认值的列,以便它成功,然后删除命名默认值吗?
I don't have access to 2000 to verify, but can you add a column with a named default, so that it succeeds, then just drop the named default?
错误消息告诉您无法添加新列因为它不允许空值并且未指定 DEFAULT 定义。
您需要向非列添加默认值-nullable 字段如下:
编辑: 我刚刚确切地看到了您在单独的 SQL Server 安装(2000 和 2005)上所做的操作。 如果表确实为空,也许最好的解决方案是删除/创建表。 这听起来像是 SQL Server 2000 中的一个错误。
The error message tells you that you cannot add the new column because it does not allow nulls and does not specify a DEFAULT definition.
You need to add a default value to the non-nullable field like this:
Edit: I just saw exactly what you do on separate SQL Server installations (2000 and 2005). If the table is truly empty perhaps the best solution is to drop/create the table. It sounds like a bug in SQL Server 2000.
您是否按顺序考虑过以下 2 个:
我认为这也应该适用于 2000 年(我这里只有 2005 年)
Have you considered the following 2 in sequence:
I think that should work on 2000 as well (I only have 2005 here)