我有一个表,有几个可空的整数列。出于几个原因,这是不可取的,因此我希望将所有空值更新为0,然后将这些列设置为NOT NULL。除了将null更改为0之外,还必须保留数据。
我正在寻找特定的SQL语法来更改列(称为ColumnA)为“非空”。假设数据已更新为不包含空值。
使用SQL server 2000。
我有一个表,有几个可空的整数列。出于几个原因,这是不可取的,因此我希望将所有空值更新为0,然后将这些列设置为NOT NULL。除了将null更改为0之外,还必须保留数据。
我正在寻找特定的SQL语法来更改列(称为ColumnA)为“非空”。假设数据已更新为不包含空值。
使用SQL server 2000。
当前回答
在SSMS GUI中也可以使列不为空和添加默认值。
正如其他人已经指出的,您不能设置“not null”直到所有 现有数据为“非空”,如下所示:
UPDATE myTable SET myColumn = 0
完成后,在设计视图中显示表(右击 表,点击“设计视图”),你可以取消勾选允许 像这样空列:
仍然在选定列的设计视图中,可以看到 下面窗口中的列属性,并设置默认值为0,如下所示:
其他回答
您可以使用以下sql更改现有DB列的定义。
ALTER TABLE mytable modify mycolumn datatype NOT NULL;
在SSMS GUI中也可以使列不为空和添加默认值。
正如其他人已经指出的,您不能设置“not null”直到所有 现有数据为“非空”,如下所示:
UPDATE myTable SET myColumn = 0
完成后,在设计视图中显示表(右击 表,点击“设计视图”),你可以取消勾选允许 像这样空列:
仍然在选定列的设计视图中,可以看到 下面窗口中的列属性,并设置默认值为0,如下所示:
在外键约束的情况下…如果“0”不在主键表的列中,就会出现问题。解决办法是……
步骤1:
使用以下代码禁用所有约束:
EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"
步骤2:
RUN UPDATE COMMAND (as mentioned in above comments)
RUN ALTER COMMAND (as mentioned in above comments)
步骤3:
使用以下代码启用所有约束:
exec sp_msforeachtable @command1="print '?'", @command2="ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"
只要列不是唯一标识符即可
UPDATE table set columnName = 0 where columnName is null
Then
修改表并将字段设置为非空,并指定默认值为0
首先,使所有当前NULL值消失:
UPDATE [Table] SET [Column]=0 WHERE [Column] IS NULL
然后,更新表定义以禁止“null”:
ALTER TABLE [Table] ALTER COLUMN [Column] INTEGER NOT NULL