Действительное логическое значение (XQuery)
Это действительные логические значения:
Значение false, если операнд является пустой последовательностью или логическим значением false.
В противном случае — значение true.
Можно вычислить действительное логическое значение для выражений, возвращающих одно логическое значение, последовательность узла или пустую последовательность. Обратите внимание на то, что логическое значение вычисляется неявно в процессе обработки следующих типов значений:
Логические выражения
Предложение WHERE выражения FLWOR
Далее приводится пример действительного логического значения. При обработке выражения if определяется действительное логическое значение условия. Действительное логическое значение является false, потому что /a[1] возвращает пустую последовательность. Результат возвращается как XML с одним текстовым узлом (false).
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