我不确定我正在使用的数据库是否做了一些特别的事情,但是在优化旧代码时,我遇到了以下(净化(查询:
SELECT Code
FROM GovernmentThing
WHERE IsGovernment = 'True'
我检查了IsGovernment
的数据类型,假设它是一个varchar(5)
或类似的东西,却发现它是一个bit
字段。
然后,我假设代码是错误的,并通过运行返回IsGovernment
字段的查询进行检查。令我非常惊讶的是,我发现查询只返回IsGovernment
设置为 1 的行!由于我当时想知道对字符串文字'False'
的检查会返回什么,所以我测试了一下,只是发现只返回了零值!!
可能是我在 TSQL 更新中的某个地方错过了一些东西,或者有一些棘手的配置可以完成这项工作,但是......我以前从未听说过这个。
有人可以启发我 - 这是记录在某处,还是???
SQL Server 2012
下面是描述此行为的位数据类型文档的摘录:
字符串值 TRUE 和 FALSE 可以转换为位值:TRUE 转换为 1,FALSE 转换为 0。