Efektywna wartość boole'a (XQuery)

Dotyczy:SQL Server

Oto efektywne wartości boolowskie:

  • Fałsz, jeśli operand jest ciągiem pustym lub fałszem booleowskim.

  • W przeciwnym razie wartość jest prawdziwa.

Efektywną wartość boolowską można obliczyć dla wyrażeń, które zwracają pojedynczą wartość boolowską, sekwencję węzłów lub pustą sekwencję. Należy zauważyć, że wartość boolowska jest obliczana domyślnie, gdy przetwarzane są następujące typy wyrażeń:

Poniżej znajduje się przykład efektywnej wartości boolowskiej. Gdy wyrażenie if jest przetwarzane, określa się efektywną wartość boolowską warunku. Ponieważ /a[1] zwraca pusty ciąg, efektywna wartość boolowska jest fałszywa. Wynik jest zwracany jako XML z jednym węzłem tekstowym (false).

value is false  
DECLARE @x XML  
SET @x = '<b/>'  
SELECT @x.query('if (/a[1]) then "true" else "false"')  
go  

W następującym przykładzie efektywna wartość boolowska jest prawdziwa, ponieważ wyrażenie zwraca ciąg niepusty.

DECLARE @x XML  
SET @x = '<a/>'  
SELECT @x.query('if (/a[1]) then "true" else "false"')  
go  

Podczas zapytań o kolumny lub zmienne xml można mieć węzły typu Boole'a. Data () w tym przypadku zwraca wartość boolowską. Jeśli wyrażenie zapytania zwraca prawdziwą wartość boolowską, efektywna wartość boole'a jest prawdziwa, jak pokazano w następnym przykładzie. Następuje również ilustracja na tym przykładzie:

  • Zostanie utworzona kolekcja schematów XML. Element <b> w kolekcji ma typ boole'a.

  • Tworzona jest i zapytywana jest typowa zmienna xml .

  • Wyrażenie data(/b[1]) zwraca wartość boolowską prawdziwą. Dlatego efektywna wartość boolowska w tym przypadku jest prawdziwa.

  • Wyrażenie data(/b[2]) zwraca fałszywą wartość boolowską. Dlatego efektywna wartość boolowska w tym przypadku jest fałszywa.

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