2017-04-06 16 views
1

私は同じXMLフォーマットのデータを取得し、そこからデータをインポートする必要があるさまざまなベンダーの何百ものファイルを持っています。 私は(DescriptionDetail)要素に問題が生じていますOpenXML同じ要素と属性を持つxmlファイルをインポートします

<?xml version="1.0" encoding="UTF-8"?> 
<Items> 
    <Item> 
     <PartNumber>075050</PartNumber> 
      <Descriptions> 
       <DescriptionDetail Maintenance="A" LanguageCode="EN" DescriptionCode="DES">Ring Gear Spacer</DescriptionDetail> 
       <DescriptionDetail Maintenance="A" LanguageCode="EN" DescriptionCode="SHO">Spacer</DescriptionDetail> 
       <DescriptionDetail Maintenance="A" LanguageCode="EN" DescriptionCode="INV">Ring Gear Pt </DescriptionDetail> 
       <DescriptionDetail Maintenance="A" LanguageCode="EN" DescriptionCode="EXT">Gear Spacer</DescriptionDetail> 
      </Descriptions> 
     </Item> 
     <Item> 
      <PartNumber>1100</PartNumber> 
      <Descriptions> 
       <DescriptionDetail Maintenance="A" LanguageCode="EN" DescriptionCode="DES">Shim Pack</DescriptionDetail> 
       <DescriptionDetail Maintenance="A" LanguageCode="EN" DescriptionCode="SHO">Shim Pack</DescriptionDetail> 
       <DescriptionDetail Maintenance="A" LanguageCode="EN" DescriptionCode="INV">Chrysler/Dana/Ford/GM</DescriptionDetail> 
       <DescriptionDetail Maintenance="A" LanguageCode="EN" DescriptionCode="EXT">Pinion Shim Pack</DescriptionDetail> 
       <DescriptionDetail Maintenance="A" LanguageCode="EN" DescriptionCode="MKT"> Win a Gear</DescriptionDetail> 
     </Descriptions> 
    </Item> 
</Items> 

*** SQLコードは、事前にXMLで

USE XYZCompany 
INSERT INTO XMLwithOpenXML(XMLData, LoadedDateTime) 
SELECT CONVERT(XML, BulkColumn) AS BulkColumn, GETDATE() 
FROM OPENROWSET(BULK '\\SRETDM\Attributes\Frank Gerster\CustXML-Changed\MGPIES-Items.XML', SINGLE_BLOB) AS x; 

*** SQL Code used to select the information 
USE XYZCompany 
GO 
DECLARE @XML AS XML, @hDoc AS INT, @SQL NVARCHAR (MAX) 
SELECT @XML = XMLData FROM XMLwithOpenXML 
EXEC sp_xml_preparedocument @hDoc OUTPUT, @XML 
SELECT Maintenance,LanguageCode,DescriptionCode,PartNumber,DescriptionDetail 
FROM OPENXML(@hDoc, '/Items/Item/Descriptions/DescriptionDetail') 
WITH 
(
PartNumber [varchar](50) '../../PartNumber', 
DescriptionDetail [varchar](50) 'DescriptionDetail', 
MaintenanceType [varchar](50) '@MaintenanceType', 
LanguageCode [varchar](50) '@LanguageCode', 
DescriptionCode [varchar](50) '@DescriptionCode' 
) 
EXEC sp_xml_removedocument @hDoc 
GO 

enter image description here

感謝をもたらすために使用さ

答えて

0

FROM OPENXML文書を準備したり削除したりする対応するSPは古くなっており、これ以上使用すべきではありません。イオンが存在する)。適切なmethods the XML data type providesを使用してください。

predicateを使用すると、右に手をつけることができます<DescriptionDetail>

DECLARE @xml XML= 
'<?xml version="1.0" encoding="UTF-8"?> 
<Items> 
    <Item> 
     <PartNumber>075050</PartNumber> 
      <Descriptions> 
       <DescriptionDetail Maintenance="A" LanguageCode="EN" DescriptionCode="DES">Ring Gear Spacer</DescriptionDetail> 
       <DescriptionDetail Maintenance="A" LanguageCode="EN" DescriptionCode="SHO">Spacer</DescriptionDetail> 
       <DescriptionDetail Maintenance="A" LanguageCode="EN" DescriptionCode="INV">Ring Gear Pt </DescriptionDetail> 
       <DescriptionDetail Maintenance="A" LanguageCode="EN" DescriptionCode="EXT">Gear Spacer</DescriptionDetail> 
      </Descriptions> 
     </Item> 
     <Item> 
      <PartNumber>1100</PartNumber> 
      <Descriptions> 
       <DescriptionDetail Maintenance="A" LanguageCode="EN" DescriptionCode="DES">Shim Pack</DescriptionDetail> 
       <DescriptionDetail Maintenance="A" LanguageCode="EN" DescriptionCode="SHO">Shim Pack</DescriptionDetail> 
       <DescriptionDetail Maintenance="A" LanguageCode="EN" DescriptionCode="INV">Chrysler/Dana/Ford/GM</DescriptionDetail> 
       <DescriptionDetail Maintenance="A" LanguageCode="EN" DescriptionCode="EXT">Pinion Shim Pack</DescriptionDetail> 
       <DescriptionDetail Maintenance="A" LanguageCode="EN" DescriptionCode="MKT"> Win a Gear</DescriptionDetail> 
     </Descriptions> 
    </Item> 
</Items>'; 

--Theクエリ

SELECT pn.value(N'(PartNumber/text())[1]','int') AS PartNumber 
     ,pn.value(N'(Descriptions/DescriptionDetail[@DescriptionCode="DES"]/text())[1]','nvarchar(max)') AS Detail_DES 
     ,pn.value(N'(Descriptions/DescriptionDetail[@DescriptionCode="SHO"]/text())[1]','nvarchar(max)') AS Detail_SHO 
     ,pn.value(N'(Descriptions/DescriptionDetail[@DescriptionCode="INV"]/text())[1]','nvarchar(max)') AS Detail_INV 
     ,pn.value(N'(Descriptions/DescriptionDetail[@DescriptionCode="EXT"]/text())[1]','nvarchar(max)') AS Detail_EXT 
     ,pn.value(N'(Descriptions/DescriptionDetail[@DescriptionCode="MKT"]/text())[1]','nvarchar(max)') AS Detail_MKT 
FROM @xml.nodes(N'/Items/Item') AS A(pn) 

結果

+------------+------------------+------------+-----------------------+------------------+------------+ 
| PartNumber | Detail_DES  | Detail_SHO | Detail_INV   | Detail_EXT  | Detail_MKT | 
+------------+------------------+------------+-----------------------+------------------+------------+ 
| 75050  | Ring Gear Spacer | Spacer  | Ring Gear Pt   | Gear Spacer  | NULL  | 
+------------+------------------+------------+-----------------------+------------------+------------+ 
| 1100  | Shim Pack  | Shim Pack | Chrysler/Dana/Ford/GM | Pinion Shim Pack | Win a Gear | 
+------------+------------------+------------+-----------------------+------------------+------------+ 
:次は、XMLが型付きXML変数に読み込まれていること、を前提としてい
関連する問題