我不确定我正在使用的数据库是否做过特别的事情,但是在优化旧代码时,我遇到了以下(经过消毒的)查询:
SELECT Code
FROM GovernmentThing
WHERE IsGovernment = 'True'
我检查了IsGovernment
的数据类型,假设它是varchar(5)
或类似的东西,只是发现它是bit
字段。
然后,我认为代码是错误的,并通过运行返回IsGovernment
字段的查询来进行检查。令我惊讶的是,我发现查询仅返回IsGovernment
设置为1的行!自从我想知道对字符串文字'False'
的检查将返回什么后,我进行了测试,发现仅返回了零值!
我可能错过了TSQL更新中的某些内容,或者有一些棘手的配置使这项工作可行,但是...我以前从未听说过。
有人可以启发我吗?-这是在某处记录的吗????
SQL Server 2012
答案 0 :(得分:2)
这是bit data type documentation的摘录,描述了此行为:
可以将字符串值TRUE和FALSE转换为位值:TRUE 转换为1,而FALSE转换为0。