Поделиться через


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

Область применения: SQL Server

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

  • Значение 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-столбцов или переменных можно иметь узлы логического типа. Данные () в этом случае возвращают логическое значение. Если выражение запроса возвращает логическое значение 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  

См. также

Основы XQuery
Инструкции и итерации FLWOR (XQuery)