1

我知道 SQL Server 没有布尔数据类型,最好的选择是使用 BIT 数据类型。

我的问题是布尔表达式评估什么。例如,如果我有声明

expr1 AND expr2

如果 expr1 为真而 expr2 为假,它们是否在内部评估为值为 1 和 0 的 BIT?然后 AND 运算符检查 BIT?

我认为情况并非如此,因为这样应该可以:

select 1 where 1 and 0

那么sql server内部有布尔数据类型吗?

以下作品

select 1 where 1 = 0
select 1 where 1 = 0 and 0 = 0

但是这个

select 1 where 1 and 0

报告

消息 4145,级别 15,状态 1,第 1 行 在预期条件的上下文中指定的非布尔类型表达式,靠近“和”。

这意味着内部 sql server 将表达式作为布尔值处理,但为什么不能访问该数据类型。

4

2 回答 2

3

SQL Server 确实有Boolean数据类型。您可以打开逻辑运算符 (Transact-SQL)手册页并找到以下语句:

逻辑运算符测试某些条件的真实性。逻辑运算符(如比较运算符)返回值为 TRUE、FALSE 或 UNKNOWN的布尔数据类型。

只是您不能像使用其他 Transact-SQL 数据类型一样使用此类型。例如,您不能声明布尔变量或参数,不能向表中添加布尔列,不能转换为/从布尔值转换。但是您可以使用布尔表达式并在需要它们的上下文中使用它们(WHERE, ON, 检查约束...)。您还可以将布尔运算符应用于这些表达式:ANDNOT等。(像<,=LIKEother 这样的运算符也可以被认为是布尔值,因为它们返回布尔值结果,但它们的操作数实际上绝不是布尔值。)

因此,总而言之,SQL Server 中有一个布尔类型,但它的使用是有限的,如上所述。为什么?抱歉,我的回答可能很愚蠢,但我对此很满意:这是他们选择的方式。

于 2012-06-21T10:13:39.530 回答
0

逻辑运算符的结果为真或假。所以在你的例子中,如果expr1并且expr2是真的,你会得到一个结果。检查它是否为真是您对每个表达式所做的操作。

因此,您将例如列与位值之类的东西进行比较column_bit = 0,这将导致真或假。如果您的结果expr1为真且expr2为假,则逻辑 AND 运算符的结果为假。

编辑:

select 1 where 1 and 0不能工作,因为你不使用比较运算符。1=1 AND 0=0 有效,例如,但它的废话:)

于 2012-06-21T09:38:26.733 回答