Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Область применения:SQL Server
Первичные выражения XQuery включают литералы, ссылки на переменные, выражения элементов контекста, конструкторы и вызовы функций.
Литералы
Литералы выражений XQuery могут быть строковыми или числовыми. Строковый литерал может содержать стандартные ссылки на сущности, которые являются последовательностью символов. Последовательность начинается с амперсанда, представляющего отдельный символ, который в других случаях может иметь синтаксическую значимость. Далее приводятся стандартные ссылки на сущности в выражениях XQuery.
| Справочник по сущностям | Представляет |
|---|---|
< |
< |
> |
> |
& |
& |
" |
" |
' |
' |
Строковый литерал также может содержать символьную ссылку, XML-ссылку на символ Юникода, определяемую десятичным или шестнадцатеричным элементом кода. Например, символ Евро может быть представлен ссылкой на символ "&8364;".
Примечание.
SQL Server использует XML-версию 1.0 в качестве основы для синтаксического анализа.
Примеры
Следующие примеры иллюстрируют применение литералов, а также ссылок на сущности и символы.
Этот код возвращает ошибку, поскольку символы <' и '> имеют специальное значение:
DECLARE @var XML
SET @var = ''
SELECT @var.query(' <SalaryRange>Salary > 50000 and < 100000</SalaryRange>')
GO
При использовании вместо них ссылки на сущность запрос выполняется.
DECLARE @var XML
SET @var = ''
SELECT @var.query(' <SalaryRange>Salary > 50000 and < 100000</SalaryRange>')
GO
Следующий пример иллюстрирует использование символьной ссылки для представления знака евро:
DECLARE @var XML
SET @var = ''
SELECT @var.query(' <a>€12.50</a>')
Результат.
<a>€12.50</a>
В следующем примере разделителями в запросе являются апострофы. Таким образом, апостроф в строковом значении представляется двумя последовательными апострофами.
DECLARE @var XML
SET @var = ''
SELECT @var.query('<a>I don''t know</a>')
Go
Результат.
<a>I don't know</a>
Встроенные логические функции, true() и false(), можно использовать для представления логических значений, как показано в следующем примере.
DECLARE @var XML
SET @var = ''
SELECT @var.query('<a>{true()}</a>')
GO
Конструктор прямых элементов задает выражение в фигурных скобках. Оно заменяется своим значением в итоговом XML-файле.
Результат.
<a>true</a>
Ссылки на переменные
Ссылка на переменную в выражении XQuery — это QName, перед которым ставится знак $. В данной реализации поддерживаются только ссылки на переменные без префиксов. Например, следующий запрос задает переменную $i в выражении FLWOR.
DECLARE @var XML
SET @var = '<root>1</root>'
SELECT @var.query('
for $i in /root return data($i)')
GO
Следующий запрос не выполнится, поскольку в имя переменной добавлен префикс пространства имен.
DECLARE @var XML
SET @var = '<root>1</root>'
SELECT @var.query('
DECLARE namespace x="https://X";
for $x:i in /root return data($x:i)')
GO
Функцию расширения sql:variable() можно использовать для ссылки на переменные SQL, как показано в следующем запросе.
DECLARE @price money
SET @price=2500
DECLARE @x xml
SET @x = ''
SELECT @x.query('<value>{sql:variable("@price") }</value>')
Результат.
<value>2500</value>
Ограничения реализации
Существуют следующие ограничения реализации.
Переменные с префиксами пространства имен не поддерживаются.
Импорт модулей не поддерживается.
Объявления внешних переменных не поддерживаются. Решением для этого является использование функции sql:variable().
Выражения элементов контекста
Элементом контекста является элемент, обрабатываемый в текущем контексте выражения пути. Он инициализируется в экземпляре типа XML-данных, значение которого не равно NULL, с помощью узла документов. Его также можно изменить методом nodes() в контексте выражений XPath или предикатов [] .
Элемент контекста возвращается выражением, содержащим точку (.). Например, следующий запрос вычисляет каждый элемент <a> для присутствия атрибута.attr Если этот атрибут присутствует, элемент возвращается. Следует отметить, что условие в предикате требует, чтобы контекстный узел определялся одной точкой.
DECLARE @var XML
SET @var = '<ROOT>
<a>1</a>
<a attr="1">2</a>
</ROOT>'
SELECT @var.query('/ROOT[1]/a[./@attr]')
Результат.
<a attr="1">2</a>
Вызовы функций
Встроенные функции XQuery и функции SQL Server sql:variable() и sql:column() можно вызывать. Список реализованных функций см. в разделе "Функции XQuery" для типа данных XML.
Ограничения реализации
Существуют следующие ограничения реализации.
Объявление функций в прологе XQuery не поддерживается.
Импорт функций не поддерживается.