FOR XML (SQL Server)
Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure
SELECT
Запрос возвращает результаты в виде набора строк. При необходимости можно получить формальные результаты SQL-запроса в виде XML, указав FOR XML
предложение в запросе. Предложение FOR XML
можно использовать в запросах верхнего уровня и в вложенных запросах. Предложение верхнего уровня FOR XML
можно использовать только в инструкции SELECT
. В вложенных запросах FOR XML
можно использовать в INSERT
инструкциях и UPDATE
DELETE
инструкциях. FOR XML
также можно использовать в инструкциях назначения.
В предложении FOR XML
укажите один из следующих режимов:
RAW
AUTO
EXPLICIT
PATH
В RAW
режиме создается один <row>
элемент для каждой строки в наборе строк, возвращаемом инструкцией SELECT
. Вы можете создать XML-иерархию, написав вложенные FOR XML
запросы.
Режим AUTO
создает вложение в результирующий XML с помощью эвристики в зависимости от способа SELECT
указания инструкции. Управление формой создаваемой XML структуры минимально. Вложенные FOR XML
запросы можно записать для создания XML-иерархии за пределами AUTO
XML-фигуры, созданной эвристиками режима.
Режим EXPLICIT
позволяет более контролировать форму XML. В XML-структуре могут быть использованы смешанные атрибуты и элементы. Это требует особого формата для результирующего набора строк, создаваемого в результате выполнения запроса. Формат этого набора строк затем сопоставляется с формой XML-структуры. EXPLICIT
В режиме можно смешивать атрибуты и элементы, создавать оболочки и вложенные сложные свойства, создавать разделенные пробелами значения (например, OrderID
атрибут может содержать список значений идентификатора заказа) и смешанное содержимое.
Однако запросы в режиме записи EXPLICIT
могут быть громоздкими. Вы можете использовать некоторые из новых FOR XML
возможностей, таких как запись вложенных FOR XML RAW
запросов AUTO
или PATH
запросов в режиме и TYPE
директивы вместо использования EXPLICIT
режима для создания иерархий. Вложенные FOR XML
запросы могут создавать любой XML-код, который можно создать с помощью EXPLICIT
режима. Дополнительные сведения см. в статьях Использование вложенных запросов FOR XML и Директива TYPE в запросах FOR XML.
Режим PATH
вместе с возможностью вложенного FOR XML
запроса обеспечивает гибкость EXPLICIT
режима проще.
Эти режимы применяются только для выполнения запроса, для которого они заданы. Они не влияют на результаты последующих запросов.
FOR XML
не является допустимым для любого выбора, используемого с предложением FOR BROWSE
.
Примеры
Следующая инструкция SELECT
получает данные из таблиц Sales.Customer
и Sales.SalesOrderHeader
базы данных AdventureWorks2022
. В этом запросе задается режим AUTO
в предложении FOR XML
:
USE AdventureWorks2022;
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.AdventureWorks2022.Person.Person
FOR XML AUTO;
Локальный сервер: если ServerName
это локальный сервер, запрос возвращает следующий текст:
<AdventureWorks2022.Person.Person LastName="Achong" />
Сетевой сервер: когда ServerName
это сетевой сервер, запрос возвращает следующий текст:
<ServerName.AdventureWorks2022.Person.Person LastName="Achong" />
Избегайте неоднозначности: эту потенциальную неоднозначность можно избежать, указав этот псевдоним:
SELECT TOP 1 LastName
FROM ServerName.AdventureWorks2022.Person.Person x
FOR XML AUTO;
Теперь запрос, для которого исключена неоднозначность, возвращает следующий текст:
<x LastName="Achong"/>