Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к:SQL Server
База данных SQL Azure
Управляемый экземпляр SQL Azure
База данных SQL в Microsoft Fabric
SELECT Запрос возвращает результаты в виде набора строк. При необходимости можно получить формальные результаты SQL-запроса в виде XML, указав FOR XML предложение в запросе. Предложение FOR XML можно использовать в запросах верхнего уровня и в вложенных запросах. Конструкцию верхнего уровня FOR XML можно использовать только в операторе SELECT. Во вложенных запросах FOR XML можно использовать в операторах INSERT, UPDATE и DELETE.
FOR XML также можно использовать в инструкциях назначения.
В предложении FOR XML укажите один из следующих режимов:
RAWAUTOEXPLICITPATH
В 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 базы данных AdventureWorks2025 . В этом запросе задается режим 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"/>