Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Применимо к:SQL Server
База данных
SQL AzureУправляемый экземпляр
SQL AzureБаза данных SQL в Microsoft Fabric
Тип данных xml и директива TYPE в запросах FOR XML позволяют обрабатывать XML-документы, возвращаемые запросами FOR XML, как на сервере, так и на клиенте.
Обработка с помощью переменных типа XML
Результат запроса FOR XML можно присвоить переменной типа xml или воспользоваться языком XQuery, чтобы выполнить к нему запрос, после чего и присвоить полученный результат переменной типа xml для дополнительной обработки.
DECLARE @x xml
SET @x=(SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID=122 or ProductModelID=119
FOR XML RAW, TYPE)
SELECT @x
-- Result
--<row ProductModelID="122" Name="All-Purpose Bike Stand" />
--<row ProductModelID="119" Name="Bike Wash" />
XML-данные, возвращаемые в переменной @x, можно дополнительно обработать с применением методов типа данных xml . Например, с помощью метода ProductModelID value() можно получить значение атрибута.
DECLARE @i int;
SET @i = (SELECT @x.value('/row[1]/@ProductModelID[1]', 'int'));
SELECT @i;
В следующем примере результат запроса FOR XML возвращается в виде типа данных xml , так как в предложении TYPE указана директива FOR XML .
SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID=119 or ProductModelID=122
FOR XML RAW, TYPE,ROOT('myRoot');
Результат:
<myRoot>
<row ProductModelID="122" Name="All-Purpose Bike Stand" />
<row ProductModelID="119" Name="Bike Wash" />
</myRoot>
Поскольку результат имеет тип xml , непосредственно к нему можно применить один из методов типа данных xml , как показано в следующем запросе. В запросе метод query() (xml Data Type) используется для получения первого дочернего элемента <row> элемента <myRoot>.
SELECT (SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID=119 or ProductModelID=122
FOR XML RAW, TYPE,ROOT('myRoot')).query('/myRoot[1]/row[1]');
Результат:
<row ProductModelID="122" Name="All-Purpose Bike Stand" />
Возвращение результатов внутреннего запроса FOR XML во внешние запросы в виде экземпляров типа XML
Можно создать вложенные запросы FOR XML , в которых результат внутреннего запроса возвращает внешнему запросу данные типа xml . Например:
SELECT Col1,
Col2,
( SELECT Col3, Col4
FROM T2
WHERE T2.Col = T1.Col
...
FOR XML AUTO, TYPE )
FROM T1
WHERE ...
FOR XML AUTO, TYPE;
Обратите внимание на следующие данные из предыдущего запроса:
XML-данные, сформированные внутренним запросом
FOR XML, добавляются к XML-результату внешнего запросаFOR XML.Во внутреннем запросе указана директива
TYPE. Таким образом, возвращаемые внутренним запросом XML-данные имеют тип xml . Если директива TYPE не указана, внутренний запросFOR XMLвозвращает результат типа nvarchar(max) и XML-данные преобразуются в сущности.
Управление формой результирующего XML-данных
Вложенные запросы FOR XML предоставляют больше возможностей управления формой результирующих XML-данных. При помощи вложенных запросов FOR XML можно конструировать XML-данные, сочетающие в себе атрибутивную и элементную модели.
Дополнительные сведения об указании атрибутивного и элементного XML с помощью вложенных запросов FOR XML см. в разделах Сравнение запросов FOR XML и вложенных запросов FOR XML и Формирование XML-кода с вложенными запросами FOR XML.
С помощью вложенных запросов FOR XML в режиме AUTO можно формировать XML-иерархии, включающие соседние элементы. Дополнительные сведения см. в Формирование однотипных элементов с помощью вложенного запроса в режиме AUTO.
Независимо от используемого режима вложенные запросы FOR XML предоставляют больший контроль при описании формата результирующих XML-данных. Их можно использовать вместо запросов в режиме EXPLICIT.
Примеры
В следующих темах приведены примеры вложенных запросов FOR XML.
Сравнение запросов FOR XML и вложенных запросов FOR XML
Сравнение одноуровневого запроса FOR XML с вложенным запросом FOR XML. Данный пример включает в себя демонстрацию того, как для результата запросов можно указать и атрибутивную, и элементную модели XML.Создание сопутствующих элементов с помощью вложенного запроса в автоматическом режиме
Демонстрирует, как создавать связанные элементы с помощью вложенного запроса в режиме AUTO.Использование вложенных запросов FOR XML в ASP.NET
Демонстрирует, как приложение ASPX может использовать FOR XML для возврата XML из SQL Server.Формирование XML-кода с вложенными запросами FOR XML
Показывает, как использовать вложенные запросы FOR XML для управления структурой XML-документа, созданного SQL Server.