Поделиться через


FOR XML (SQL Server)

Запрос SELECT возвращает результаты в виде набора строк. При необходимости можно получить формальные результаты SQL-запроса в виде XML, указав предложение FOR XML в запросе. Предложение FOR XML можно использовать в запросах верхнего уровня и в вложенных запросах. Предложение FOR XML верхнего уровня можно использовать только в инструкции SELECT. В подзапросах можно использовать команду FOR XML в инструкциях INSERT, UPDATE и DELETE. Его также можно использовать в инструкциях назначения.

В предложении FOR XML укажите один из следующих режимов:

  • НЕОБРАБОТАННЫЕ

  • АВТО

  • Явный

  • ПУТЬ

Режим RAW создает один <элемент строки> для каждой строки в наборе строк, возвращаемом инструкцией SELECT. Вы можете создать XML-иерархию, написав вложенные запросы FOR XML.

Режим AUTO создает вложение в результирующий XML с помощью эвристики в зависимости от того, как указан оператор SELECT. У вас есть минимальный контроль над формой созданного XML-файла. Вложенные запросы FOR XML можно записать для создания XML-иерархии за пределами XML-фигуры, созданной эвристиками режима AUTO.

Режим EXPLICIT позволяет более контролировать форму XML. Атрибуты и элементы можно смешивать при выборе формы XML. Он требует определенного формата для результирующего набора строк, созданного из-за выполнения запроса. Затем этот формат набора строк сопоставляется с XML-фигурой. В режиме ЯВНО можно смешивать атрибуты и элементы, создавать оболочки и вложенные сложные свойства, создавать разделенные пробелами значения (например, атрибут OrderID может содержать список значений идентификатора заказа), а также смешанное содержимое.

Однако написание запросов в режиме "EXPLICIT" может быть обременительным. Вы можете использовать некоторые из новых возможностей FOR XML, таких как запись вложенных запросов в режиме RAW/AUTO/PATH ДЛЯ XML и директивы TYPE вместо использования явного режима для создания иерархий. Вложенные запросы FOR XML могут создавать любой XML-код, который можно создать с помощью режима EXPLICIT. Дополнительные сведения см. в разделе "Использование вложенных ЗАПРОСОВ FOR XML " и директивы TYPE в ЗАПРОСАх FOR XML.

Режим PATH вместе с вложенной функцией ЗАПРОСА FOR XML обеспечивает гибкость режима ЯВНЫМ образом.

Эти режимы применяются только для выполнения запроса, для которого они заданы. Они не влияют на результаты последующих запросов.

FOR XML недействителен для любого выбора, используемого с предложением FOR BROWSE.

Пример

SELECT Следующая инструкция извлекает сведения из Sales.CustomerSales.SalesOrderHeader таблиц в AdventureWorks2012 базе данных. Этот запрос задает AUTO режим в условии FOR XML :

USE AdventureWorks2012  
GO  
SELECT Cust.CustomerID,   
       OrderHeader.CustomerID,  
       OrderHeader.SalesOrderID,   
       OrderHeader.Status  
FROM Sales.Customer Cust   
INNER JOIN Sales.SalesOrderHeader OrderHeader  
ON Cust.CustomerID = OrderHeader.CustomerID  
FOR XML AUTO  

Клаузула FOR XML и имена серверов

Если инструкция SELECT с предложением FOR XML указывает четырехкомпонентное имя в запросе, имя сервера не возвращается в результирующем XML-документе при выполнении запроса на локальном компьютере. Однако имя сервера возвращается в качестве четырехкомпонентного имени при выполнении запроса на сетевом сервере.

Например, рассмотрим этот запрос:

SELECT TOP 1 LastName  
FROM ServerName.AdventureWorks2012.Person.Person  
FOR XML AUTO  

При ServerName использовании локального сервера запрос возвращает следующее:

<AdventureWorks2012.Person.Person LastName="Achong" />  

При ServerName использовании сетевого сервера запрос возвращает следующее:

<ServerName.AdventureWorks2012.Person.Person LastName="Achong" />  

Эту потенциальную неоднозначность можно избежать, указав этот псевдоним:

SELECT TOP 1 LastName  
FROM ServerName.AdventureWorks2012.Person.Person x  
FOR XML AUTO   

Этот запрос возвращает следующее:

<x LastName="Achong"/>  

См. также

Базовый синтаксис предложения FOR XML
Использование режима RAW вместе с FOR XML
Используйте режим AUTO с FOR XML
Использование режима EXPLICIT вместе с FOR XML
Использование режима PATH совместно с FOR XML
OPENXML (SQL Server)
Добавление пространств имен в запросы с WITH XMLNAMESPACES