Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Применимо к:SQL Server
База данных
SQL AzureУправляемый экземпляр
SQL AzureБаза данных SQL в Microsoft Fabric
Определяет запрос XQuery для экземпляра типа данных xml. Результат имеет тип данных xml. Метод возвращает экземпляр нетипизированного XML.
Синтаксис
query ('XQuery')
Аргументы
XQuery
Это строка, выражение XQuery, выполняющее в экземпляре XML запросы к узлам — элементам и атрибутам.
Примеры
В этом подразделе приведены примеры использования метода query() типа данных xml.
А. Использование метода query() для переменной типа xml
В следующем примере объявляется переменная @myDoc типа данных xml, и этой переменной присваивается экземпляр XML. Далее методом query() для документа определяется запрос XQuery.
Запрос извлекает дочерний элемент <Features>элемента <ProductDescription>:
DECLARE @myDoc XML
SET @myDoc = '<Root>
<ProductDescription ProductID="1" ProductName="Road Bike">
<Features>
<Warranty>1 year parts and labor</Warranty>
<Maintenance>3 year parts and labor extended maintenance is available</Maintenance>
</Features>
</ProductDescription>
</Root>'
SELECT @myDoc.query('/Root/ProductDescription/Features')
Далее представлен результат.
<Features>
<Warranty>1 year parts and labor</Warranty>
<Maintenance>3 year parts and labor extended maintenance is available</Maintenance>
</Features>
B. Использование метода query() для столбца типа XML
В следующем примере метод query() используется для задания запроса XQuery к столбцу CatalogDescription типа данных xml в базе данных AdventureWorks:
SELECT CatalogDescription.query('
declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
<Product ProductModelID="{ /PD:ProductDescription[1]/@ProductModelID }" />
') as Result
FROM Production.ProductModel
where CatalogDescription.exist('
declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
declare namespace wm="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain";
/PD:ProductDescription/PD:Features/wm:Warranty ') = 1
Обратите внимание на следующие элементы из предыдущего запроса:
Столбец CatalogDescription является типизированным столбцом xml. Это означает, что с ним связана коллекция схем. В прологе XQuery ключевое слово namespace определяет префикс, который в дальнейшем используется в тексте запроса.
Метод query() строит XML, элемент <
Product>, имеющий атрибут ProductModelID, и значение атрибута ProductModelID извлекается из базы данных. Дополнительные сведения о конструировании XML см. в разделе XML-конструкция (XQuery).Метод exist() (тип данных XML) в предложении WHERE находит только те строки, которые в XML содержат элемент <
Warranty>. Опять же, ключевое слово namespace определяет два префикса пространства имен.
Далее представлен частичный результат.
<Product ProductModelID="19"/>
<Product ProductModelID="23"/>
...
Заметим, что оба метода — и query(), и exist() — объявляют префикс PD. В этих случаях для первоначального определения префиксов и использования их в запросе можно использовать WITH XMLNAMESPACES.
WITH XMLNAMESPACES
(
'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS PD,
'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain' AS WM
)
SELECT CatalogDescription.query('<Product ProductModelID="{ /PD:ProductDescription[1]/@ProductModelID }" />')
AS Result
FROM Production.ProductModel
WHERE CatalogDescription.exist('/PD:ProductDescription/PD:Features/WM:Warranty ') = 1;
См. также
Добавление пространств имен в запросы с WITH XMLNAMESPACES
Сравнение типизированного и нетипизированного XML
Создание экземпляров данных XML
Методы для типа данных XML
Язык обработки XML-данных (XML DML)