为什么我无法在Users表中添加新列?

时间:2011-05-08 21:25:21

标签: sql-server

我正在做一些功课。我的数据库用户使用了一些其他属性,而不仅仅是当我实现登录和注册机制时ASP 2.0自动为我创建的属性。但是当我尝试保存修改时显示错误。有人可以帮我一把吗? 这是错误:

enter image description here 错误说:

  

'aspnet_Users'表    - 无法修改表格。 ALTER TABLE仅允许添加列   可以包含空值,或者有一个   指定了DEFAULT定义,或者   要添加的列是标识或   timestamp列,或者if   以前的条件都不是   满意的表必须是空的   允许添加此列。柱   'kjoptekvoten'无法添加到   非空表'aspnet_Users'因为   它不满足这些条件。

当我实现基于表单的身份验证和注册时,自动创建了该数据库。现在的问题是用户需要更多属性。我怎样才能赋予它更多属性?最简单的方法是什么?不介意它是否在理论上是正确的(它仅用于作业)。

我非常感谢你的帮助。

4 个答案:

答案 0 :(得分:5)

除了数据库方面的技术性之外,这里还有一个更深层次的问题。

您不应该更改aspnet_Users表,因为您绕过了asp.net中的成员资格'系统'的工作方式。相反,请查看配置文件机制:http://www.4guysfromrolla.com/articles/101106-1.aspx

答案 1 :(得分:3)

您需要使新属性可为空或提供默认值。但是您还需要考虑如何从db获取值。 sql成员资格提供程序利用自动生成的存储过程将数据放入返回的成员资格用户实例中,因此仅添加表中的属性将不足以将属性值提供给应用程序。我会改用用户属性表。

答案 2 :(得分:2)

错误消息说明了一切:
您正在添加一个不能为空的新列(复选框“Allow Nulls”未选中),但由于您没有提供默认值,因此它将为Null。 因此SQL Server无法创建新列。

你可以做两件事:

a)创建允许Null的新列 然后在所有现有行中放置一个默认值:
update aspnet_Users set kjoptekvoten = 0)
......然后取消选中“Allow Nulls”

b)直接使用默认值创建新列 我不知道你是否可以在Management Studio中这样做,但在T-SQL中很容易:

alter table aspnet_Users 
add kjoptekvoten int not null
constraint Name_For_Constraint default(0) with values

这将添加new not nullable列,AND创建一个带有默认值的约束,AND填充所有现有行中的默认值(如果没有“with values”子句,SQL Server将不执行此操作)。

答案 3 :(得分:2)

通常我只是将列设置为allow nulls

然后执行SQL UPDATE TABLE SET VALUE = whateva

然后更新表定义以不允许空值。