Sql

Sql в xml: XML-данные (SQL Server) — SQL Server

FOR XML (SQL Server) — SQL Server

Twitter LinkedIn Facebook Адрес электронной почты

  • Статья
  • Чтение занимает 2 мин

Применимо к:База данныхSQL Server Azure SQL Управляемый экземпляр 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 создает один <элемент строки> для каждой строки в наборе строк, возвращаемом инструкцией SELECT. XML-иерархию можно создать с помощью написания вложенных запросов FOR XML.

В режиме AUTO вложенность XML создается эвристически, в зависимости от метода определения инструкции SELECT. Управление формой создаваемой XML структуры минимально. Для создания XML-иерархии, расширяющей возможности XML-структуры, созданной эвристически в режиме AUTO, можно написать вложенные запросы FOR 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 базы данных 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, указано четырехкомпонентное имя, в возвращаемом документе имя сервера отсутствует, если запрос выполняется на локальном компьютере. Однако имя сервера возвращается как часть имени, если запрос выполняется на сетевом сервере.

В качестве примера рассмотрим запрос:

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 Mode с FOR XML
Использование AUTO Mode с FOR XML
Использование режима EXPLICIT с предложением FOR XML
Использование режима PATH совместно с FOR XML
Инструкция OPENXML (SQL Server)
Добавление пространств имен в запросы с WITH XMLNAMESPACES

Запросы к XML-столбцам—ArcMap | Документация

  • Извлечение нескольких значений из XML-столбца

В системных таблицах базы геоданных GDB_Items и GDB_ItemRelationships есть несколько XML-столбцов, содержащих сведения о схеме и отношениях элементов. В частности, в столбце Definition в таблице GDB_Items записываются подробные сведения о базе геоданных. Тип документа XML в столбце зависит от конкретного типа элемента. Например, определение класса пространственных объектов содержит информацию о полях, доменах и подтипах таблицы, пространственной привязке геометрии, а также о том, участвует ли класс пространственных объектов в наборе данных контроллера.

Для работы со значением из столбца XML в системной таблице в IBM Db2, Microsoft SQL Server или PostgreSQL необходимо получить XML-документ из базы данных целиком и работать с ним локально в XML или текстовом средстве просмотра. Для программистов, работающих с Java, C++ или C#, будет удобнее просматривать документ в Document Object Model (DOM). Разработчики SQL могут использовать функции базы данных XML для получения определенных значений из определений элементов с помощью XPath (языка запросов для XML-документов).

В базах геоданных под управлением Oracle и IBM Informix столбцы XML используют ArcSDE XML, который хранит информацию в виде больших двоичных объектов в нескольких отдельных таблицах.

К ним можно обращаться напрямую с помощью SQL.

Для просмотра содержимого в столбцах XML системных таблиц баз геоданных под управлением Oracle предусмотрены два системных вида, в которых содержимое столбцов XML-таблиц базы геоданных хранится в виде объектов с типом данных CLOB. Вид GDB_Items_vw отображает содержимое столбцов Definition, Documentation и ItemInfo из таблицы GDB_Items в столбцах CLOB. Вид GDB_ItemRelationships_vw отображает содержимое столбцов Attributes из таблицы GDB_ItemRelationships в столбце CLOB. CLOB могут быть прочитаны как текст.

Примечание:

В разных СУБД подписи и поведение XML-функций могут существенно отличаться.

В следующем примере показано определение элемента определения интервального домена в XML-документе:

<? xml version = "1.0" encoding="utf-8"?>
<GPRangeDomain2
     xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
     xmlns:xs = "http://www.w3.org/2001/XMLSchema"
     xmlns:typens = "http://www.esri.com/schemas/ArcGIS/10.
0" xsi:type = "typens:GPRangeDomain2"> <DomainName>Angle</DomainName> <FieldType>esriFieldTypeInteger</FieldType> <MergePolicy>esriMPTDefaultValue</MergePolicy> <SplitPolicy>esriSPTDuplicate</SplitPolicy> <Description>Valid rotation angles</Description> <Owner>harley</Owner> <MaxValue xsi:type = "xs:int">359</MaxValue> <MinValue xsi:type = "xs:int">0</MinValue> </GPRangeDomain2>

Двумя наиболее важными значениями для интервального домена являются минимальное и максимальное значения. Эти элементы представлены выражениями /GPRangeDomain2/MinValue и /GPRangeDomain2/MaxValue, соответственно. Ниже приведен пример запроса SQL, извлекающего эти значения конкретного интервального домена в базе геоданных в SQL Server.

--Queries an sde-schema geodatabase in SQL Server
SELECT
  Definition.value('(/GPRangeDomain2/MinValue)[1]','nvarchar(max)') AS "MinValue",
  Definition.
value('(/GPRangeDomain2/MaxValue)[1]','nvarchar(max)') AS "MaxValue" FROM sde.GDB_ITEMS INNER JOIN sde.GDB_ITEMTYPES ON sde.GDB_ITEMS.Type = sde.GDB_ITEMTYPES.UUID WHERE sde.GDB_ITEMS.Name = 'Angle' AND sde.GDB_ITEMTYPES.Name = 'Range Domain' MinValue MaxValue 0 359

Предыдущий пример относительно прост. Для более сложных решений см. статью XML-схема базы геоданных, особенно приложение для разработчиков, работающих с системными таблицами.

Вы можете выполнять запросы к другим XML-столбцам системных таблиц также, как они формулируются для столбца Definition таблицы GDB_Items. Учтите, что для столбца Documentation не предусмотрено XML-схемы, определяемой базой геоданных. В столбце Documentation содержатся метаданные, связанные с элементами базы геоданных. В разных организациях элементы метаданных, содержащиеся в этом столбце, отличаются, так как это зависит от стандартов метаданных и рабочих процессов, используемых для управления ими. Документ XML DTD с описанием структуры метаданных ArcGIS – ArcGISmetadatav1.

dtd – поставляется вместе с ArcGIS Desktop и находится в папке \Metadata\Translator\Rules директории установки ArcGIS.

Довольно часто имеет смысл извлечь из одного XML-документа несколько значений сразу. Ниже приведено значение Definition для одного из таких примеров, домена кодированных значений:

<? xml version = "1.0" encoding="utf-8"?>
<GPCodedValueDomain2
    xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xs = "http://www.w3.org/2001/XMLSchema"
    xmlns:typens = "http://www.esri.com/schemas/ArcGIS/10.0"
  <DomainName>Material</DomainName>
  <FieldType>esriFieldTypeString</FieldType>
  <MergePolicy>esriMPTDefaultValue</MergePolicy>
  <SplitPolicy>esriSPTDuplicate</SplitPolicy>
  <Description>Valid pipe materials</Description>
  <Owner>aelflad</Owner>
  <CodedValues xsi:type= "typens:ArrayOfCodedValue">
   <CodedValue  xsi:type= "typens:CodedValue">
     <Name>Cast iron</Name>
     <Code xsi:type= "xs:string">CI</Code>
   </CodedValue>
   <CodedValue  xsi:type= "typens:CodedValue">
     <Name>Ductile iron</Name>
     <Code xsi:type= "xs:string">DI</Code>
   </CodedValue>
   <CodedValue  xsi:type= "typens:CodedValue">
     <Name>PVC</Name>
     <Code xsi:type= "xs:string">PVC</Code>
   </CodedValue>
   <CodedValue  xsi:type= "typens:CodedValue">
     <Name>Asbestos concrete</Name>
     <Code xsi:type= "xs:string">AC</Code>
   </CodedValue>
   <CodedValue  xsi:type= "typens:CodedValue">
     <Name>Copper</Name>
     <Code xsi:type= "xs:string">COP</Code>
   </CodedValue>
  </CodedValues>
</GPCodedValueDomain2>

Как правило разработчикам и администраторам требуются пары кодов и значений с выражением XPath вида /GPCodedValueDomain2/CodedValues/CodedValue. В следующем примере показано, каким образом можно извлечь несколько значений из одного XML-определения, чтобы получить пары кода и значений для всех доменов в базе геоданных в SQL Server.

-- Get the code/value pairs for each coded value domain in the geodatabase.
SELECT
   codedValue.value('Code[1]', 'nvarchar(max)') AS "Code",
   codedValue.value('Name[1]', 'nvarchar(max)') AS "Value"
FROM
   dbo.GDB_ITEMS AS items INNER JOIN dbo.GDB_ITEMTYPES AS itemtypes
   ON items.Type = itemtypes.UUID
CROSS APPLY
   items.Definition.nodes
    ('/GPCodedValueDomain2/CodedValues/CodedValue') AS CodedValues(codedValue)
WHERE
   itemtypes.Name = 'Coded Value Domain' AND
   items.Name = 'Material'
Code    Value
CI      Cast iron
DI      Ductile iron
PVC     PVC
AC      Asbestos concrete
COP     Copper

ДЛЯ XML (SQL Server) — SQL Server

Редактировать

Твиттер LinkedIn Фейсбук Электронная почта

  • Статья
  • 3 минуты на чтение

Применяется к: SQL Server База данных SQL Azure Azure SQL Управляемый экземпляр

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

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

  • RAW
  • АВТО
  • ЯВНОЕ
  • ПУТЬ

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

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

Режим 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 в базе данных AdventureWorks2012 . Этот запрос указывает AUTO режим в пункте FOR XML :

 USE AdventureWorks2012
ИДТИ
ВЫБЕРИТЕ Custom.CustomerID,
       OrderHeader.CustomerID,
       OrderHeader. SalesOrderID,
       Заголовок заказа.Статус
ОТ Sales.Customer Custom
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Sales.SalesOrderHeader
ON Custom.CustomerID = OrderHeader.CustomerID
ДЛЯ XML АВТО;
 

Предложение FOR XML и имена серверов

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

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

 SELECT TOP 1 LastName
  ОТ ServerName.AdventureWorks2012.Person.Person
  ДЛЯ XML АВТО;
 

 

Локальный сервер :   Если ServerName является локальным сервером, запрос возвращает следующий текст:

 
 

 

Сетевой сервер :   Если ServerName является сетевым сервером, запрос возвращает следующий текст:

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

 

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

 SELECT TOP 1 LastName
  ОТ ServerName.AdventureWorks2012.Person.Person x
  ДЛЯ XML АВТО;
 

Теперь запрос с устранением неоднозначности возвращает следующий текст:

 
 

См. также

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

Обратная связь

Просмотреть все отзывы о странице

Работа с XML-данными в SQL Server

XML (расширяемый язык разметки) — один из наиболее распространенных форматов, используемых для обмена информацией между различными платформами. Благодаря своей простоте и удобочитаемости он стал стандартом де-факто для обмена данными. Кроме того, XML легко расширяется.

В этой статье мы увидим, как мы можем работать с XML в SQL Server. Мы увидим, как преобразовывать таблицы SQL в XML, как загружать документы XML в SQL Server и как создавать таблицы SQL из документов XML.

Давайте сначала сгенерируем некоторые фиктивные данные. Мы будем использовать эти данные для создания XML-документов. Выполните следующий скрипт:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

CREATE DATABASE Showroom

 

Use Showroom

CREATE TABLE Car  

(  

  CarId int identity(1,1) первичный ключ,  

  Name varchar(100),  

  Make varchar(100),  

  Model int ,  

  Price int ,  

  Type varchar(20)  

)  

    

insert into Car( Name, Make,  Model , Цена, Тип)

ЗНАЧЕНИЯ («Corrolla», «Toyota», 2015, 20000, «Седан»),

(«Civic», «Honda», 2018, 25000, «Седан»),

(«Passo ‘,’Toyota’,2012, 18000,’Hatchback’),

(‘Land Cruiser’,’Toyota’,2017, 40000,’SUV’),

(‘Corrolla’,’Toyota’,2011, 17000 ,’Седан’),

(«Vitz», «Toyota», 2014, 15000, «Hatchback»),

(«Accord», «Honda», 2018, 28000, «Sedan»),

(«7500», «BMW» ,2015, 50000, ‘Седан’),

(‘Парадо’, ‘Тойота’, 2011, 25000, ‘Внедорожник’),

(‘С200’, ‘Мерседес’, 2010, 26000, ‘Седан’),

(«Corrolla», «Toyota», 2014, 19000, «Седан»),

(«Civic», «Honda», 2015, 20000, «Седан»)

В приведенном выше сценарии мы создали базу данных Showroom с одной таблицей Car. Таблица Car имеет пять атрибутов: CarId, Name, Make, Model, Price и Type. Затем мы добавили 12 фиктивных записей в таблицу Car.

Преобразование в XML из таблиц SQL

Самый простой способ преобразовать данные из таблиц SQL в формат XML — использовать предложения FOR XML AUTO и FOR XML PATH.

ДЛЯ XML AUTO в SQL SERVER

Предложение FOR XML AUTO преобразует каждый столбец в таблице SQL в атрибут в соответствующем XML-документе.

Выполните следующий скрипт:

ИСПОЛЬЗОВАНИЕ Выставочный зал

ВЫБЕРИТЕ * ИЗ МАШИНЫ

ДЛЯ XML АВТО

В выводе консоли вы увидите следующее:

Нажмите на ссылку, и вы увидите следующий документ в новом окне запроса студии управления SQL Server:

Вы можете видеть, что для каждой записи в XML-документе создан элемент Car, и для каждого столбца к каждому элементу в XML-документе добавлен атрибут с таким же именем.

ДЛЯ ПУТИ XML в SQL SERVER

Класс FOR XML AUTO создает XML-документ, в котором каждый столбец является атрибутом. С другой стороны, FOR XML PATH создаст XML-документ, в котором каждая запись является элементом, а каждый столбец — вложенным элементом для конкретной записи. Давайте посмотрим на это в действии:

USE Showroom

SELECT * FROM Car

FOR XML PATH

Снимок вывода выглядит следующим образом:

В выводе вы увидите всего 12 элементов (на скриншоте показаны только первые 4). Вы можете видеть, что каждое имя столбца было преобразовано в элемент. Однако есть одна проблема; по умолчанию имя родительского элемента — «row». Мы можем изменить это, используя следующий запрос:

USE Showroom

SELECT * FROM Car

ДЛЯ ПУТИ XML («Автомобиль»)

В выводе вы можете увидеть Car как родительский элемент для каждого подэлемента. Однако документ имеет неправильный формат, так как в нем нет корневого элемента. Чтобы добавить корневой элемент, нам нужно выполнить следующий скрипт:

USE Showroom

SELECT * FROM Car

FOR XML PATH («Автомобиль»), ROOT («Автомобили»)

В выводе вы должны увидеть «Cars» в качестве корневого элемента, как показано ниже:

Теперь предположим, что вы хотите, чтобы CarId был атрибутом элемента Car, а не элементом. Вы можете сделать это с помощью следующего скрипта:

1

2

3

4

5

6

7

8

9

ИСПОЛЬЗОВАНИЕ Выставочный зал

Select Carid As [@carid],

название как [carinfo/name],

Make [carinfo/make],

модель [carinfo/model],

Цена,

Тип

от Car

.

FOR XML PATH («Автомобиль»), ROOT («Автомобили»)

Вывод выглядит следующим образом:

Теперь вы можете видеть, что CarId стал атрибутом элемента Car.

Мы можем добавить дополнительные уровни вложенности в XML-документ. Например, если мы хотим, чтобы элементы Name, Make и Model были вложены в другой элемент CarInfo, мы можем сделать это с помощью следующего скрипта:

1

2

3

4

5

6

7

8

9

Используйте выставочный зал

SELECT CARID AS [@CARID],

Имя как [carinfo/name],

Make [carinfo/Make],

Модель

FROM Car

FOR XML PATH («Car»), ROOT («Cars»)

В выводе вы увидите новый элемент CarInfo, который включает в себя элементы Name, Make и Model, как показано ниже:

Наконец, если вы хотите преобразовать элементы Name и Make в атрибут элемента CarInfo, вы можете сделать это с помощью следующего скрипта:

1

2

3

4

5

6

7

8

9

Используйте выставочный зал

SELECT CARID AS [@CARID],

Имя как [carinfo/@name],

Make [carinfo/@Make],

Модель [Carinfo/Model],

,

Введите

FROM Car

FOR XML PATH («Car»), ROOT («Cars»)

Вывод выглядит следующим образом:

Сохраните приведенный выше XML-документ с именем Cars. xml. В следующем разделе мы загрузим этот XML-скрипт в SQL Server и увидим, как создать таблицу из XML-документа.

Для тех, кто заинтересован в дальнейших статьях о FOR XML PATH, см. Предложение FOR XML PATH в статье SQL Server.

Создание таблицы SQL из документа XML

В предыдущем разделе мы увидели, как создать XML-документ из таблицы SQL. В этом разделе мы увидим, как сделать обратное, то есть мы создадим таблицу в SQL, используя XML-документы.

Документ, который мы будем использовать, — это документ, который мы создали в предыдущем разделе. Один узел документа выглядит так:

Создание таблицы SQL с использованием атрибутов XML

Давайте сначала посмотрим, как мы можем создать таблицу SQL, используя атрибуты. Предположим, мы хотим создать таблицу с двумя столбцами, содержащими значения из атрибутов Name и Make из элемента CarInfo. Мы можем сделать это, используя следующий скрипт:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18 9003

19

объявляет @cars xml

Выберите @cars = C

от OpenRowset (Bulk ‘D: \ cars. xml’, single_blob) в качестве автомобилей (c)

Select @cars

@cars

9003

hdoc int

    

EXEC sp_xml_preparedocument @hdoc ВЫВОД, @cars

Выбрать *

из OpenXML (@hdoc, ‘/car/car/carinfo’, 1)

с (

Имя Varchar (100),

Make Varchar (100)

)

EXEC sp_xml_removedocument@hdoc

В приведенном выше скрипте мы объявляем переменную типа XML @cars. В переменной хранится результат, возвращаемый функцией OPENROWSET, которая извлекает данные XML в двоичном формате. Затем с помощью оператора SELECT @Cars мы печатаем содержимое XML-файла. В этот момент XML-документ загружается в память.

Затем мы создаем дескриптор XML-документа. Чтобы прочитать атрибуты и элементы XML-документа, нам нужно прикрепить дескриптор к XML-документу. Эту задачу выполняет хранимая процедура sp_xml_preparedocument. Он принимает дескриптор и переменную документа в качестве параметров и создает связь между ними.

Затем мы используем функцию OPENXML для чтения содержимого XML-документа. Функция OPENXML принимает три параметра: дескриптор XML-документа, путь к узлу, для которого мы хотим получить атрибуты или элементы, и режим. Значение режима 1 возвращает только атрибуты. Затем внутри предложения WITH нам нужно определить имя и тип атрибутов, которые вы хотите вернуть. В нашем случае элемент CarInfo имеет два атрибута Name и Make, поэтому мы извлекаем оба.

В качестве последнего шага мы выполняем хранимую процедуру sp_xml_removedocument, чтобы удалить XML-документ из памяти. В выходных данных вы увидите значения из атрибутов Name и Make элемента CarInfo, как показано ниже:

Создание таблицы SQL с использованием элементов XML

Чтобы создать таблицу SQL с использованием элементов XML, все, что вам нужно сделать, это изменить значение режима функции OPENXML на 2 и изменить имя атрибута на имя элемента, который вы хотите получить.

Предположим, мы хотим получить значения для вложенных элементов CarInfo, Price и Type родительского элемента Car, мы можем использовать следующий скрипт:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

объявляет @cars xml

Выберите @cars = C

от OpenRowset (Bulk ‘D: \ cars. xml’, single_blob) в качестве автомобилей (c)

Select @cars

@cars

9003

HDOC INT

EXEC SP_XML_PREPAREDOCUMENT @HDOC OUTPOR0003

    Type VARCHAR(100)

    )

    

    

EXEC sp_xml_removedocument @hdoc

Вывод скрипта выше выглядит так:

Заключение

XML — один из самых популярных форматов данных для обмена информацией. В этой статье мы увидели, как мы можем создать документ с помощью XML из таблицы SQL. Мы также видели, как импортировать в таблицу SQL из XML-документа.

  • Автор
  • Последние сообщения

Бен Ричардсон

Бен Ричардсон управляет Acuity Training, ведущим поставщиком обучения SQL в Великобритании. Он предлагает полный спектр обучения SQL от вводных курсов до продвинутого обучения администрированию и работе с хранилищами данных — см.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *