有效的布尔值 (XQuery)
适用范围:SQL Server
下面是有效的布尔值:
如果操作数是空序列或布尔值 False,则为 False。
否则,值为 True。
对于返回单个布尔值、节点序列或空序列的表达式,可以计算有效的布尔值。 请注意,在处理下列类型的表达式时,将隐式计算布尔值:
逻辑表达式
not 函数
FLWOR 表达式的 WHERE 子句
下面是有效的布尔值示例。 处理 if 表达式时,将确定条件的有效布尔值。 由于 /a[1]
返回空序列,因此有效的布尔值为 False。 结果以包含一个文本节点 (False) 的 XML 返回。
value is false
DECLARE @x XML
SET @x = '<b/>'
SELECT @x.query('if (/a[1]) then "true" else "false"')
go
在以下示例中,由于表达式返回了非空序列,因此有效的布尔值为 True。
DECLARE @x XML
SET @x = '<a/>'
SELECT @x.query('if (/a[1]) then "true" else "false"')
go
查询类型化的 xml 列或变量时,可以具有布尔类型的节点。 在本例中,data()返回布尔值。 如果查询表达式返回布尔值 True,则有效的布尔值为 True,如下例所示。 本例中对下列各项也进行了说明:
创建一个 XML 架构集合。 集合中的元素 <b> 为布尔类型。
创建并查询类型化的 xml 变量。
表达式
data(/b[1])
返回布尔值 True。 因此,这种情况下,有效的布尔值为 True。data(/b[2])
表达式返回布尔值 false 值。 因此,这种情况下,有效的布尔值为 False。
CREATE XML SCHEMA COLLECTION SC AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema">
<element name="s" type="string"/>
<element name="b" type="boolean"/>
</schema>'
go
DECLARE @x XML(SC)
SET @x = '<b>true</b><b>false</b>'
SELECT @x.query('if (data(/b[1])) then "true" else "false"')
SELECT @x.query('if (data(/b[2])) then "true" else "false"')
go