SQL 服务器 - 位数据类型匹配字符串 'True' 和 'False'
SQL Server - Bit data type matches String 'True' and 'False'
我不确定我正在使用的数据库是否做了一些特殊的事情,但是在优化旧代码时,我遇到了以下(经过清理的)查询:
SELECT Code
FROM GovernmentThing
WHERE IsGovernment = 'True'
我检查了 IsGovernment
的数据类型,假设它是 varchar(5)
或类似的东西,结果发现它是一个 bit
字段。
然后我假设代码是错误的,并通过 运行 查询 returning IsGovernment
字段进行检查。令我大吃一惊的是,我发现该查询仅 returning 了 IsGovernment
设置为 1 的行!因为那时我想知道对字符串文字 'False'
的检查会 return,我测试了,只是发现只有零值被 returned!!
我可能在 TSQL 更新中遗漏了一些东西,或者有一些棘手的配置使它起作用,但是......我以前从未听说过这个。
有人能赐教吗 - 这是否记录在某处,或者???
SQL 服务器 2012
这是描述此行为的 bit data type documentation 的摘录:
The string values TRUE and FALSE can be converted to bit values: TRUE
is converted to 1 and FALSE is converted to 0.
我不确定我正在使用的数据库是否做了一些特殊的事情,但是在优化旧代码时,我遇到了以下(经过清理的)查询:
SELECT Code
FROM GovernmentThing
WHERE IsGovernment = 'True'
我检查了 IsGovernment
的数据类型,假设它是 varchar(5)
或类似的东西,结果发现它是一个 bit
字段。
然后我假设代码是错误的,并通过 运行 查询 returning IsGovernment
字段进行检查。令我大吃一惊的是,我发现该查询仅 returning 了 IsGovernment
设置为 1 的行!因为那时我想知道对字符串文字 'False'
的检查会 return,我测试了,只是发现只有零值被 returned!!
我可能在 TSQL 更新中遗漏了一些东西,或者有一些棘手的配置使它起作用,但是......我以前从未听说过这个。
有人能赐教吗 - 这是否记录在某处,或者???
SQL 服务器 2012
这是描述此行为的 bit data type documentation 的摘录:
The string values TRUE and FALSE can be converted to bit values: TRUE is converted to 1 and FALSE is converted to 0.