Effektiver boolescher Wert (XQuery)
Folgende Werte sind effektive boolesche Werte:
- False, wenn der Operand eine leere Sequenz oder ein boolesches False ist.
- Anderenfalls ist der Wert True.
Der effektive boolesche Wert kann für Ausdrücke berechnet werden, die einen einzelnen booleschen Wert, eine Knotensequenz oder eine leere Sequenz zurückgeben. Beachten Sie, dass der boolesche Wert implizit berechnet wird, wenn folgende Typen von Ausdrücken verarbeitet werden:
- Logische Ausdrücke
- Die not-Funktion
- Die WHERE-Klausel eines FLWOR-Ausdrucks
- Bedingte Ausdrücke
- Quantifizierte Ausdrücke
Das folgende Beispiel zeigt einen effektiven booleschen Wert. Wenn der if-Ausdruck verarbeitet wird, wird der effektive boolesche Wert der Bedingung bestimmt. Da /a[1]
eine leere Sequenz zurückgibt, ist der effektive boolesche Wert False. Das Ergebnis wird als XML mit einem Textknoten (false) zurückgegeben.
value is false
DECLARE @x XML
SET @x = '<b/>'
SELECT @x.query('if (/a[1]) then "true" else "false"')
go
Im folgenden Beispiel ist der effektive boolesche Wert True, weil der Ausdruck eine nicht leere Sequenz zurückgibt.
DECLARE @x XML
SET @x = '<a/>'
SELECT @x.query('if (/a[1]) then "true" else "false"')
go
Beim Abfragen typisierter xml-Spalten oder -Variablen können Knoten vom booleschen Typ vorkommen. data() gibt in diesem Fall einen booleschen Wert zurück. Wenn der Abfrageausdruck einen booleschen Wert zurückgibt, ist der effektive boolesche Wert True, was im nächsten Beispiel dargestellt ist. Das Beispiel zeigt außerdem Folgendes:
- Eine XML-Schemaauflistung wird erstellt. Das Element <b> der Auflistung ist vom booleschen Typ.
- Eine typisierte Variable xml wird erstellt und abgefragt.
- Der Ausdruck
data(/b[1])
gibt einen booleschen True-Wert zurück. Der effektive boolesche Wert ist deshalb in diesem Fall True. - Der Ausdruck
data(/b[2])
gibt einen booleschen False-Wert zurück. Der effektive boolesche Wert ist deshalb in diesem Fall 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
Siehe auch
Konzepte
XQuery-Grundlagen
FLWOR-Anweisung und -Iteration (XQuery)