我有点不理解问题。
我正在使用MS SQL Managment Studio 2008。 我有一个带表X的全新数据库。
X有3列:
现在我保存。现在我将ID设置为主键 - 保存没问题。
现在我添加一个列:Email,nvarchar 50,not null - 当我现在尝试保存时,我不能这样做,因为它告诉我保存表必须删除并重新创建。
我不明白这一点,在SQL Server 2005中我敢肯定,可以轻松添加这样的行吗?!
答案 0 :(得分:2)
答案 1 :(得分:2)
澄清Damien_The_Unbeliever所说的内容(编辑:我现在看到他已经扩展了他的回复),在你添加NOT NULL约束之前输入的前几行,在EMAIL列中没有任何值,因此将违反NOT NULL约束。首先,添加EMAIL列,允许空值。然后编辑现有行,使它们在该列中具有值。然后返回并将NOT NULL约束添加到EMAIL列。 或者,您可以在定义列时(暂时)为EMAIL提供默认值,例如: 'temp@somedomain.com',现有行将获得该默认值(如果未提供电子邮件,则为新行)。然后你可以回去编辑它们。
简单地说,规则是:如果一行或多行违反约束,则无法向已填充数据的表添加约束。
“约束”是您希望数据库强制执行的规则。
答案 2 :(得分:1)
如果不指定列的默认值,则无法执行此操作 - 否则,SQL Server如何确保表中现有行的“非空”约束?
如果您尝试通过查询执行此操作,您将获得更多解释:
ALTER TABLE Table_2 ADD Email varchar(100) 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, or the column being added is an identity or timestamp column, or alternatively if none of the previous conditions are satisfied the table must be empty to allow addition of this column. Column 'Email' cannot be added to non-empty table 'Table_2' because it does not satisfy these conditions.