BIT
SQL Server 使用数据类型而不是有什么意义BOOLEAN
吗?这只是一种调用相同事物的奇怪方式,还是存在一些微妙的概念差异?
关于数据类型的文档BIT
提及:
位数据类型可用于存储布尔值。
这似乎表明,它们实际上并不是一回事。
我知道[MS 称之为布尔值的东西]和[MS 称之为位的东西]是不同的,但从程序员的角度来看,bit
这是 T-SQL 语言提供的柏拉图式概念的最佳近似值boolean
。我很难相信这只是偶然事件而不是故意的。仅接受 0 和 1 的数字数据类型似乎不适用于其他用途。
据我所知,它们是完全不同的,在底层编译器词法分析中就是这样表示的。
boolean
是内部类型,在 T-SQL 中直接使用它的地方很少,即WHERE
CASE
和IIF
谓词。布尔值是或TRUE
或FALSE
(UNKNOWN
请注意,对于涉及空值的某些谓词,NULL
会得到非)。UNKNOWN
bit
是一种数字类型,恰好表示0 或 1(或NULL
),因此由于缺乏更好的选择,文档建议使用它来存储布尔值。A
bit
绝对不是。boolean
例如,您不能写WHERE SomeBitColumn
,同样,您也不能boolean
直接使用 ,例如SELECT x <> y
,也不能将列定义为boolean
。您确实会
boolean
在查询计划的各个位置看到 。例如,在此小提琴中,CASE
已转换为CASE WHEN [Expr1004] THEN (1) ELSE NULL END
。至于为什么 SQL Server 仅支持
bit
和不支持boolean
:这实际上不是我们可以在这里回答的问题,但可能是因为boolean
后来才定义。bit
实际上应该是一个固定或可变大小的位数组,但 SQL Server 仅支持有效的。您可以查看ANSI SQL-92bit(1)
规范以获取更多信息。