提问人:Josh 提问时间:5/4/2011 最后编辑:CommunityJosh 更新时间:5/4/2011 访问量:2690
将布尔逻辑语句的结果分配给 T-sql 中的位字段
Assign result of Boolean Logic statements to bit field in T-sql
问:
根据这个问题,我不能将布尔逻辑语句的结果赋值到位字段中。我的问题是我正在处理一个创建脚本,并且我有一些依赖标志需要布尔语句才能完成。此脚本将以所有 null 开头,用户只需输入他们想要的数据。该脚本将检测记录是否已存在。如果是这样,它将仅更新非 null 的参数。如果不存在,脚本将创建一个新记录。我正在使用 sql server 2005。
我弄清楚了插入语句,用于在未分配变量时设置默认值。我的问题来自一个特定的设置,它依赖于 2 个设置标志。如果我需要添加一个设置标志,我还希望看到一个可以支持另一个设置标志的解决方案。ISNULL(@Setting1, 0)
DECLARE @Setting1 bit
DECLARE @Setting2 bit
DECLARE @Setting3 bit
--... code snipped for setting the value
UPDATE
MyTable
SET
EnableSetting1 = ISNULL(@Setting1, EnableSetting1),
EnableSetting1 = ISNULL(@Setting2, EnableSetting2),
EnableSetting1 = ISNULL(@Setting3, EnableSetting3),
EnableComplexSetting1 = ISNULL(@Setting1, EnableComplexSetting1),
EnableComplexSetting2 = ?
WHERE
Id = @MyId
从逻辑上讲,看起来像,但这显然是不正确的。我应该如何设置复杂设置 2?如果从逻辑上讲是这样,我会怎么做,等等??
ISNULL(@Setting2, EnableSetting2) OR ISNULL(@Setting3, EnableSetting3)
ISNULL(@Setting2, EnableSetting2) OR ISNULL(@Setting3, EnableSetting3) OR ISNULL(@Setting4, EnableSetting4)
答:
4赞
marc_s
5/4/2011
#1
ISNULL
不返回布尔值 - 如果第一个表达式为 NULL,它只是确保使用提供的第二个值。
您需要使用如下内容:
UPDATE
MyTable
SET
EnableSetting1 = CASE WHEN @Setting1 IS NULL THEN 1 ELSE 0 END,
...
根据您要存储的布尔值(如果真的为 NULL),您可能需要在 和 情况下切换两个值。@Setting1
THEN
ELSE
使用此方法,您应该还能够检查两个条件:
UPDATE MyTable
SET EnableComplexSetting2 =
CASE WHEN (Complex1 IS NULL AND Complex2 IS NULL) THEN 1 ELSE 0 END
......
评论
0赞
Josh
5/4/2011
我正在按照我的意图使用上面的 ISNULL,并且它有效。我的问题是在设置 EnableComplexSetting2 时,如果有任何(@Setting1或@Setting)为 1,则结果为 1。此外,如果这些设置中的任何一个为 null,我想使用表中的值。
1赞
Josh
5/4/2011
我最终做了类似的事情。在更新之前,我正在从表中进行选择,并将 和 using 的值以及表中的当前值设置为默认值。然后在我的更新中,我使用一个 case 语句,其中如果任一是 1,则设置为 1,否则将其设置为 0。感谢您的帮助。@Setting1
@Setting2
ISNULL
EnableComplexSetting2
0赞
marc_s
5/4/2011
@Josh:很高兴我能帮上忙,最后;-)对不起,我的第一条评论——仅仅从帖子中,通常很难知道一个给定的发帖人对他所问的事情真正了解多少
评论