Действительное логическое значение (XQuery)

Это действительные логические значения:

  • Значение false, если операнд является пустой последовательностью или логическим значением false.

  • В противном случае — значение true.

Можно вычислить действительное логическое значение для выражений, возвращающих одно логическое значение, последовательность узла или пустую последовательность. Обратите внимание на то, что логическое значение вычисляется неявно в процессе обработки следующих типов значений:

Далее приводится пример действительного логического значения. При обработке выражения 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

См. также

Основные понятия

Итерация и инструкция FLWOR (XQuery)

Другие ресурсы

Основы языка XQuery