Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Import XML to SQL  [new]
intruders
Member

Откуда:
Сообщений: 140
День добрый, помогите разобраться с проблемкой. есть схема XML
<?xml version="1.0"?>
<xs:schema xmlns:ed="urn:cbr-ru:ed:v2.0" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="urn:cbr-ru:ed:v2.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="ED101">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" name="AccDoc">
          <xs:complexType>
            <xs:attribute name="AccDocNo" type="xs:unsignedByte" use="optional" />
            <xs:attribute name="AccDocDate" type="xs:date" use="optional" />
          </xs:complexType>
        </xs:element>
        <xs:element minOccurs="0" name="Payer">
          <xs:complexType>
            <xs:sequence>
              <xs:element minOccurs="0" name="Name" type="xs:string" />
              <xs:element minOccurs="0" name="Bank">
                <xs:complexType>
                  <xs:attribute name="BIC" type="xs:unsignedInt" use="optional" />
                  <xs:attribute name="CorrespAcc" type="xs:integer" use="optional" />
                </xs:complexType>
              </xs:element>
            </xs:sequence>
            <xs:attribute name="PersonalAcc" type="xs:integer" use="optional" />
          </xs:complexType>
        </xs:element>
        <xs:element minOccurs="0" name="Payee">
          <xs:complexType>
            <xs:sequence>
              <xs:element minOccurs="0" name="Name" type="xs:string" />
              <xs:element minOccurs="0" name="Bank">
                <xs:complexType>
                  <xs:attribute name="BIC" type="xs:unsignedInt" use="optional" />
                </xs:complexType>
              </xs:element>
            </xs:sequence>
            <xs:attribute name="PersonalAcc" type="xs:integer" use="optional" />
          </xs:complexType>
        </xs:element>
        <xs:element minOccurs="0" name="Purpose" type="xs:string" />
      </xs:sequence>
      <xs:attribute name="EDNo" type="xs:unsignedByte" use="optional" />
      <xs:attribute name="EDDate" type="xs:date" use="optional" />
      <xs:attribute name="EDAuthor" type="xs:unsignedInt" use="optional" />
      <xs:attribute name="Sum" type="xs:unsignedInt" use="optional" />
      <xs:attribute name="TransKind" type="xs:unsignedByte" use="optional" />
      <xs:attribute name="Priority" type="xs:unsignedByte" use="optional" />
      <xs:attribute name="SystemCode" type="xs:unsignedByte" use="optional" />
    </xs:complexType>
  </xs:element>
</xs:schema>


Пытаюсь вытянуть эти поля в sql
DECLARE @XML AS XML, @hDoc AS INT, @SQL NVARCHAR (MAX)

SELECT @XML = XMLData FROM XMLwithOpenXML

EXEC sp_xml_preparedocument @hDoc OUTPUT, @XML

SELECT EDNo, EDDate, EDAuthor,Sum,TransKind,Priority,SystemCode,AccDocNo
FROM OPENXML(@hDoc, '/ED101/AccDoc/*')
WITH 
(
EDNo [varchar](50) '*/@EDNo',
EDDate smalldatetime '*/@EDDate',
EDAuthor [varchar](100) '*/@EDAuthor',
Sum [varchar](50) '*/@Sum',
TransKind [varchar](100) '*/@TransKind',
Priority [varchar](100) '*/@Priority',
SystemCode [varchar](50) '*/@SystemCode',
AccDocNo [varchar](50) '*/@Name'
)

EXEC sp_xml_removedocument @hDoc

загвоздка в том что не могу добраться до AccDocNo [varchar](50) '*/@Name' выдаёт пустое поле
3 апр 14, 17:39    [15828704]     Ответить | Цитировать Сообщить модератору
 Re: Import XML to SQL  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
OPENXML не получится использовать, т.к. это "деревянная" структура. По сути, в ней зашито несколько таблиц. Попробуйте xquery, чтобы извлечь атрибуты.
3 апр 14, 17:52    [15828792]     Ответить | Цитировать Сообщить модератору
 Re: Import XML to SQL  [new]
intruders
Member

Откуда:
Сообщений: 140
а есть ли какой то пример?
3 апр 14, 20:37    [15829638]     Ответить | Цитировать Сообщить модератору
 Re: Import XML to SQL  [new]
invm
Member

Откуда: Москва
Сообщений: 9396
declare @hdoc int, @x xml = '<root name = "aaa">
 <element name = "bbb" />
</root>';

exec sp_xml_preparedocument @hDoc output, @x;

select
 *
from
 openxml(@hdoc, '/root/element')
 with
 (
  name1 varchar(100) '../@name',
  name2 varchar(100) '@name'
 );

exec sys.sp_xml_removedocument @hdoc;
?
3 апр 14, 21:54    [15829879]     Ответить | Цитировать Сообщить модератору
 Re: Import XML to SQL  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
12410359
3 апр 14, 21:57    [15829898]     Ответить | Цитировать Сообщить модератору
 Re: Import XML to SQL  [new]
козочка
Guest
а если несколько тегов на одном уровне, как к ним добраться?
27 май 14, 19:11    [16082006]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить