FOR XML (SQL Server)FOR XML (SQL Server)

Область применения: ДаSQL Server ДаБаза данных SQL Azure НетAzure Synapse Analytics (Хранилище данных SQL) НетParallel Data Warehouse APPLIES TO: YesSQL Server YesAzure SQL Database NoAzure Synapse Analytics (SQL DW) NoParallel Data Warehouse

Запрос SELECT возвращает результаты в виде набора строк.A SELECT query returns results as a rowset. При необходимости можно получать результаты SQL-запроса в формате XML. Для этого в запросе необходимо указать предложение FOR XML.You can optionally retrieve formal results of a SQL query as XML by specifying the FOR XML clause in the query. Предложение FOR XML может использоваться в запросах верхнего уровня и во вложенных запросах.The FOR XML clause can be used in top-level queries and in subqueries. Предложение FOR XML верхнего уровня можно использовать только в инструкции SELECT.The top-level FOR XML clause can be used only in the SELECT statement. Во вложенных запросах предложение FOR XML можно использовать в инструкциях INSERT, UPDATE и DELETE.In subqueries, FOR XML can be used in the INSERT, UPDATE, and DELETE statements. FOR XML также можно использовать в инструкциях присваивания.FOR XML can also be used in assignment statements.

В предложении FOR XML можно указать один из следующих режимов:In a FOR XML clause, you specify one of these modes:

  • RAWRAW
  • AUTOAUTO
  • EXPLICITEXPLICIT
  • PATHPATH

В режиме RAW создается одиночный элемент <row> для каждой строки набора строк, возвращенного инструкцией SELECT.The RAW mode generates a single <row> element per row in the rowset that is returned by the SELECT statement. XML-иерархию можно создать с помощью написания вложенных запросов FOR XML.You can generate XML hierarchy by writing nested FOR XML queries.

В режиме AUTO вложенность XML создается эвристически, в зависимости от метода определения инструкции SELECT.The AUTO mode generates nesting in the resulting XML by using heuristics based on the way the SELECT statement is specified. Управление формой создаваемой XML структуры минимально.You have minimal control over the shape of the XML generated. Для создания XML-иерархии, расширяющей возможности XML-структуры, созданной эвристически в режиме AUTO, можно написать вложенные запросы FOR XML.The nested FOR XML queries can be written to generate XML hierarchy beyond the XML shape that is generated by AUTO mode heuristics.

Режим EXPLICIT предоставляет больше возможностей по управлению формой XML-структуры.The EXPLICIT mode allows more control over the shape of the XML. В XML-структуре могут быть использованы смешанные атрибуты и элементы.You can mix attributes and elements at will in deciding the shape of the XML. Это требует особого формата для результирующего набора строк, создаваемого в результате выполнения запроса.It requires a specific format for the resulting rowset that is generated because of query execution. Формат этого набора строк затем сопоставляется с формой XML-структуры.This rowset format is then mapped into XML shape. Преимущества режима EXPLICIT состоят в возможности использования смешанных атрибутов и элементов, в возможности создания упаковщиков и вложенных составных свойств, создания значений, разделенных пробелами (например, атрибут OrderID может содержать список значений идентификаторов порядка), и смешанного содержимого.The power of EXPLICIT mode is to mix attributes and elements at will, create wrappers and nested complex properties, create space-separated values (for example, OrderID attribute may have a list of order ID values), and mixed contents.

Однако написание запросов в режиме EXPLICIT может быть очень обременительным.However, writing EXPLICIT mode queries can be cumbersome. Можно использовать некоторые новые возможности предложения FOR XML, например написание вложенных запросов FOR XML в режиме RAW/AUTO/PATH и директивы TYPE вместо использования режима EXPLICIT для создания иерархий.You can use some of the new FOR XML capabilities, such as writing nested FOR XML RAW/AUTO/PATH mode queries and the TYPE directive, instead of using EXPLICIT mode to generate the hierarchies. Вложенные запросы FOR XML могут создавать любую XML структуру, которую можно создать с помощью режима EXPLICIT.The nested FOR XML queries can produce any XML that you can generate by using the EXPLICIT mode. Дополнительные сведения см. в статьях Использование вложенных запросов FOR XML и Директива TYPE в запросах FOR XML.For more information, see Use Nested FOR XML Queries and TYPE Directive in FOR XML Queries.

Режим PATH совместно с вложенным запросом FOR XML обеспечивает гибкость режима EXPLICIT более простым образом.The PATH mode together with the nested FOR XML query capability provides the flexibility of the EXPLICIT mode in a simpler manner.

Эти режимы на самом деле работают только при выполнении запросов, для которых они установлены.These modes are in effect only for the execution of the query for which they are set. Они не влияют на результаты любых последующих запросов.They do not affect the results of any subsequent queries.

Предложение FOR XML недопустимо для выборки с использованием предложений FOR BROWSE.FOR XML is not valid for any selection that is used with a FOR BROWSE clause.

ПримерExample

Следующая инструкция SELECT получает данные из таблиц Sales.Customer и Sales.SalesOrderHeader базы данных AdventureWorks2012 .The following SELECT statement retrieves information from the Sales.Customer and Sales.SalesOrderHeader tables in the AdventureWorks2012 database. В этом запросе задается режим AUTO в предложении FOR XML :This query specifies the AUTO mode in the FOR XML clause:

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 и имена сервераThe FOR XML Clause and Server Names

Если в инструкции SELECT, использующей предложение FOR XML, указано четырехкомпонентное имя, в возвращаемом документе имя сервера отсутствует, если запрос выполняется на локальном компьютере.When a SELECT statement with a FOR XML clause specifies a four-part name in the query, the server name is not returned in the resulting XML document when the query is executed on the local computer. Однако имя сервера возвращается как часть имени, если запрос выполняется на сетевом сервере.However, the server name is returned as the four-part name when the query is executed on a network server.

В качестве примера рассмотрим запрос:For example, consider this query:

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

 

Локальный сервер.   Если ServerName — локальный сервер, запрос возвращает следующий текст:Local server:   When ServerName is a local server, the query returns the following text:

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

 

Сетевой сервер.   Если ServerName — сетевой сервер, запрос возвращает следующий текст:Network server:   When ServerName is a network server, the query returns the following text:

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

 

Исключение неоднозначности.   Возможной неоднозначности можно избежать с помощью такого псевдонима:Avoid ambiguity:   This potential ambiguity can be avoided by specifying this alias:

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

Теперь запрос, для которого исключена неоднозначность, возвращает следующий текст:Now the disambiguated query returns the following text:

<x LastName="Achong"/>

См. также:See Also

Базовый синтаксис предложения FOR XMLBasic Syntax of the FOR XML Clause
Использование RAW Mode с FOR XMLUse RAW Mode with FOR XML
Использование AUTO Mode с FOR XMLUse AUTO Mode with FOR XML
Использование режима EXPLICIT с предложением FOR XMLUse EXPLICIT Mode with FOR XML
Использование режима PATH совместно с FOR XMLUse PATH Mode with FOR XML
OPENXML (SQL Server)OPENXML (SQL Server)
Добавление пространств имен в запросы с WITH XMLNAMESPACESAdd Namespaces to Queries with WITH XMLNAMESPACES