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