有效的布林值 (XQuery)
下列為有效的布林值:
如果運算元是空的序列或 Boolean false,則為 False。
否則,此值為 True。
對於會傳回單一布林值、節點序列或空序列的運算式,可以計算出有效的布林值。請注意,在處理下列類型的運算式時,會隱含地計算布林值。
下列是有效布林值的範例。在處理 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