2016-06-14 5 views
2

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

Файл XML отображается следующим образом:

<?xml version="1.0" encoding="UTF-8" ?> 
<xmloutfile> 
<header> 
<TYPE>XLFT</TYPE> 
<DN>C001</DN> 
</header> 
<table> 
<row> 
<column></column> 
<column></column> 
<column></column> 
<column></column> 
<column></column></row> 
<row> 
<column></column> 
<column></column> 
<column></column> 
<column></column> 
<column></column></row> 
<row> 
<column>ID</column> 
<column>Title</column> 
<column>Type</column> 
<column>Country</column> 
<column></column></row> 
<row> 
<column>12345</column> 
<column>ABC</column> 
<column>SN</column> 
<column>Hong Kong</column> 
<column></column></row> 
<row> 
<column>17777</column> 
<column></column> 
<column>MO</column> 
<column>China</column> 
<column></column></row> 
<row> 
<column></column> 
<column></column> 
<column></column> 
<column></column> 
<column></column></row></table></xmloutfile> 

Что нас интересует с это значения ID, название, тип, страна (и, возможно, замечание)

<column>ID</column> 
<column>Title</column> 
<column>Type</column> 
<column>Country</column> 
<column></column></row> 
<row> 
<column>12345</column> 
<column>ABC</column> 
<column>SN</column> 
<column>Hong Kong</column> 
<column></column></row> 

просто представьте, что это общая таблица, как я могу вставить эти данные соответственно?

В конце концов я хотел бы сделать это, используя SSIS, но в этот момент (было бы хорошо, если бы я мог сделать это через SSIS!), А просто хочу оценить любые возможные подходы. Tks

+0

Другими словами, вы хотите, чтобы удалить все пустые строки/столбцы? –

ответ

1

XQuery:

declare @x xml ='<xmloutfile> 
    <header> 
    <TYPE>XLFT</TYPE> 
    <DN>C001</DN> 
    </header> 
    <table> 
    <row> 
     <column></column> 
     <column></column> 
     <column></column> 
     <column></column> 
     <column></column> 
    </row> 
    <row> 
     <column></column> 
     <column></column> 
     <column></column> 
     <column></column> 
     <column></column> 
    </row> 
    <row> 
     <column>ID</column> 
     <column>Title</column> 
     <column>Type</column> 
     <column>Country</column> 
     <column></column> 
    </row> 
    <row> 
     <column>12345</column> 
     <column>ABC</column> 
     <column>SN</column> 
     <column>Hong Kong</column> 
     <column></column> 
    </row> 
    <row> 
     <column>17777</column> 
     <column></column> 
     <column>MO</column> 
     <column>China</column> 
     <column></column> 
    </row> 
    <row> 
     <column></column> 
     <column></column> 
     <column></column> 
     <column></column> 
     <column></column> 
    </row> 
    </table> 
</xmloutfile>' 


select t.c.value('column[1]', 'nvarchar(max)') 
    , t.c.value('column[2]', 'nvarchar(max)') 
    , t.c.value('column[3]', 'nvarchar(max)') 
    , t.c.value('column[4]', 'nvarchar(max)') 
    , t.c.value('column[5]', 'nvarchar(max)') 
from @x.nodes('//row') t(c) 
+0

Отличные tks! Я использовал: select tcvalue ('column [1]', 'nvarchar (max)') ID , tcvalue ('column [2]', 'nvarchar (max)') Название , tcvalue (' колонка [3] ' 'NVARCHAR (макс)') Тип , tcvalue ('столбец [4]', 'NVARCHAR (макс)') Страна , tcvalue ('столбец [5]',' NVARCHAR (макс) ') Примечание от @ XML.nodes (' // строка ') т (с), где c.value (' ./ колонка [1]», 'VARCHAR (макс)') не в ('ID', '') – Trowa

+0

@Trowa, приветствия. –