Sql server SQL Server 2008:无法保存,因为必须删除并新建表才能保存?

Sql server SQL Server 2008:无法保存,因为必须删除并新建表才能保存?,sql-server,Sql Server,我陷入了一个不理解的小问题 我正在使用MS SQL管理工作室2008。 我有一个全新的数据库和表X X有3列: ID,唯一标识符,不为空 用户名,nvarchar 50,不为空 密码,nvarchar50,不为空 现在我存钱了。现在我将ID设置为主键-保存时没有问题 现在我添加了一列:Email,nvarchar 50,not null-当我现在尝试保存时,我不能这样做,因为它告诉我保存表时必须删除并创建新表 我不明白这一点,在SQLServer2005中,我敢肯定,添加这样的行很容易 如果

我陷入了一个不理解的小问题

我正在使用MS SQL管理工作室2008。 我有一个全新的数据库和表X

X有3列:

  • ID,唯一标识符,不为空
  • 用户名,nvarchar 50,不为空
  • 密码,nvarchar50,不为空
现在我存钱了。现在我将ID设置为主键-保存时没有问题

现在我添加了一列:Email,nvarchar 50,not null-当我现在尝试保存时,我不能这样做,因为它告诉我保存表时必须删除并创建新表


我不明白这一点,在SQLServer2005中,我敢肯定,添加这样的行很容易

如果不指定列的默认值,则无法执行此操作-否则,SQL Server将如何确保表中现有行上的“NOTNULL”约束

如果您尝试通过查询执行此操作,您将得到更多解释:

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.

为了澄清不信者Damien_所说的话(编辑:我现在看到他扩展了他的回答),在添加NOTNULL约束之前,您输入的前几行在电子邮件列中没有任何值,因此NOTNULL约束将被违反。首先,添加EMAIL列,允许空值。然后编辑现有行,使其在该列中具有值。然后返回并将NOTNULL约束添加到电子邮件列。 或者,您可以在定义列时(暂时)为电子邮件提供默认值,例如'temp@somedomain.com,现有行将获得该默认值(如果未提供电子邮件,新行也会获得该默认值)。然后您可以返回并编辑它们

简单地说,规则是:如果一个或多个行违反了约束,则不能向已经填充了数据的表添加约束


“约束”是您希望数据库强制执行的规则。

能否向我们展示用于保存该行的代码(C#、VB.NET、T-SQL-无论什么)??我真的不明白你到底在问什么。。。。一些代码可能有助于理解你在做什么哦,是的,对不起,我是说列,我会编辑它。当然,我会添加专栏。谢谢,这很有帮助,但你能解释一下原因吗?我不明白——真的。我会理解的。@Kovu:请参考@Tim-answer了解解释。