6

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

ID    Name 
1     test1
2     test2

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

ID    Name   IsConfirmed
1     test1     null
2     test2     null

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

谢谢

4

2 回答 2

19
UPDATE YourTableName
SET IsConfirmed=0
WHERE isConfirmed is Null
于 2012-05-29T05:07:45.530 回答
2

@JohnFx 的建议是手头问题的完美解决方案。但是,您可能想知道如何防止这种情况出现,同时可能解决其他潜在问题。

特别是,您想立即将 NULL 替换为 0 的事实可能表明您从一开始就不想让列保存 NULL。如果确实如此,您应该添加带有说明符的列NOT NULL

ALTER TABLE tablename
ADD IsConfirmed bit NOT NULL

当然,如果您尝试将NOT NULL列添加到非空表中,如果您没有同时为该列提供默认值,您将收到错误消息,因为 SQL Server 会尝试使用 NULL 来添加列,其中,根据定义,是不允许的。因此,NOT NULL改为添加这样的列:

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

该部分是可选的,您可以仅保留,但我仍然建议您为所有约束(包括默认值)提供明确的名称,因为这样您可以更轻松地删除/重新创建它们。出于同样的原因(为了让您更轻松地管理约束),您最好使用固定模式来命名约束。上述语句中的模式(for ,后跟表名,后跟列名)只是一个示例,您很可能会想出一个不同的模式。但是一旦你有了,就保持一致。CONSTRAINT DF_tablename_IsConfirmedDEAFULT (0)DFDEFAULT

于 2012-05-29T06:57:52.630 回答