Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Применимо к:SQL Server
База данных
SQL AzureУправляемый экземпляр
SQL AzureБаза данных SQL в Microsoft Fabric
SELECT Запрос возвращает результаты в виде набора строк. При необходимости можно получить формальные результаты SQL-запроса в виде XML, указав FOR XML предложение в запросе. Предложение FOR XML можно использовать в запросах верхнего уровня и в вложенных запросах. Предложение верхнего уровня FOR XML можно использовать только в инструкции SELECT . В вложенных запросах FOR XML можно использовать в INSERTинструкциях и UPDATEDELETE инструкциях.
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;
, запрос возвращает следующий текст:
<AdventureWorks2022.Person.Person LastName="Achong" />
, запрос возвращает следующий текст:
<ServerName.AdventureWorks2022.Person.Person LastName="Achong" />
Избегайте неоднозначности: эту потенциальную неоднозначность можно избежать, указав этот псевдоним:
SELECT TOP 1 LastName
FROM ServerName.AdventureWorks2022.Person.Person x
FOR XML AUTO;
Теперь запрос, для которого исключена неоднозначность, возвращает следующий текст:
<x LastName="Achong"/>