在特定列中将false设置为所有行

时间:2012-05-29 05:06:23

标签: sql-server tsql

我有一个包含以下列的表:

ID    Name 
1     test1
2     test2

现在我添加了新列IsConfirmed。此列在所有行中都包含null

ID    Name   IsConfirmed
1     test1     null
2     test2     null

如何使用T-SQL将falseIsConfirmed列设置为表中的所有行?

由于

2 个答案:

答案 0 :(得分:18)

UPDATE YourTableName
SET IsConfirmed=0
WHERE isConfirmed is Null

答案 1 :(得分:2)

@JohnFx's suggestion是解决手头问题的完美解决方案。但是,您可能希望有兴趣知道如何防止出现这种情况,同时可能解决其他潜在问题。

特别是,您希望立即用0替换NULL这一事实可能表明您从未希望该列首先保留NULL。如果确实如此,您应该使用NOT NULL说明符添加列:

ALTER TABLE tablename
ADD IsConfirmed bit NOT NULL

当然,如果您尝试将NOT NULL列添加到非空表中,如果您为列提供默认值,则会出现错误,因为SQL Server会尝试添加带有NULL的列,根据定义,不允许使用NULL。因此,请添加NOT NULL这样的列:

ALTER TABLE tablename
ADD IsConfirmed bit NOT NULL
CONSTRAINT DF_tablename_IsConfirmed DEFAULT (0)

CONSTRAINT DF_tablename_IsConfirmed部分是可选的,您可以只留下DEAFULT (0),但我仍然建议您为所有约束提供明确的名称,包括默认值,因为这样会更容易你放弃/重新创建它们。出于同样的原因(为了使您更容易管理约束),在命名约束时使用固定模式会更好。上面语句中的模式(DFDEFAULT,后跟表名,后跟列名)只是一个例子,你很可能会出现另一个例子。但是一旦你拥有,就要保持一致。