Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
xml
Тип данных и директива TYPE в запросах FOR XML позволяют обрабатывать возвращаемый XML на сервере, а также на клиенте.
Обработка с помощью переменных типа XML
Вы можете назначить результат 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
непосредственно для этого 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.