将SQL Server表字段从NULL更新为非NULL的更新脚本

5
我在SQL Server数据库中的一张表里有一个字段(比如说foo),最初定义时是可为空的,但新需求要求该字段必须为非空。
那么在不删除表内容的情况下,用更新脚本将该字段更新为非空,有什么最佳方法呢?我试过从设计视图生成脚本,但执行时失败了,因为表的当前内容中包含foo的NULL值。更糟糕的是,如果忽略此错误,它会继续删除表的所有内容!
2个回答

10

在将可为NULL的列更改为NOT NULL之前,您必须为任何具有NULL值的行设置一个值。

-- Clean up the data which won't comply with the schema changes
UPDATE t SET foo = 0 WHERE foo IS NULL

-- Apply the NOT NULL
ALTER TABLE t ALTER COLUMN foo int NOT NULL

-- Add a default for the future if that's what you want
ALTER TABLE t ADD CONSTRAINT t_foo_def DEFAULT 0 FOR foo

0

您可以为非空字段设置默认值。如果您想将其从可为空更改为非空,则必须提供一些可以分配给该字段中空值行的值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接