2017-01-27 36 views
1

如何將其插入到SQL表中?如何將XML文件插入到SQL表中

<ITEM id="1" 
    name="Swimmer Head" 
    mesh_name="eq_head_swim" 
    totalpoint="0" 
    type="equip" 
    res_sex="m" 
    res_level="0" 
    slot="head" 
    weight="2" 
    bt_price="0" 
    hp="4" 
    ap="8" 
    maxwt="0" 
    sf="0" 
    fr="0" 
    cr="0" 
    pr="0" 
    lr="0" 
    color="#FFFFFFFF" 
    desc="Part of an everyday swimming outfit" /> 

另外,在這個XML文件中有很多更多的行,所以我怎樣才能用1 .sql文件做到這一點?

+1

你問如何反序列化這一點,並插入結構到一個表,或者是你問如何將這個XML二進制大對象到XML數據類型列? – Siyual

+0

我想將此結構插入表中,是的。 –

回答

0

再詢問Siyual的問題,但更具體:

是很多人的這一行應該進入一個表?

而且它沒有嵌套?

換句話說,它會繼續重複<ITEM id= [...] desc="something" />嗎?如果答案是肯定的,請考慮一個perl腳本,它在等號後面和雙引號之間選取所有內容,並將獲得的位連接起來,用逗號分隔它們,每個<ITEM [...] />創建一行。

這樣,你會得到一個CSV文件加載。當然,你必須首先創建目標表。

+0

是的,還有更多的線條。如果你想我可以發送你的XML文件,所以你會指導我一點,因爲我是一個完整的新手。 –

3

這裏有一個方法會給你一個EAV結構(實體屬性值)。

您可能會注意到我只需要找出一個關鍵因素... ID

我截了幾個元素,並添加只是爲了進行演示

Declare @XML xml = ' 
<ITEM id="1" name="Swimmer Head" mesh_name="eq_head_swim" totalpoint="0" type="equip" res_sex="m" res_level="0" slot="head" weight="2" bt_price="0" color="#FFFFFFFF" desc="Part of an everyday swimming outfit" /> 
<ITEM id="2" name="Boxer Feet" mesh_name="eq_feet_boxer" totalpoint="0" type="equip" res_sex="m" res_level="0" slot="head" weight="2" bt_price="25.00" color="#FFFFFFFF" desc="Somthing for the boxer" /> 
' 

Select ID  = r.value('@id','int') 
     ,Item = attr.value('local-name(.)','varchar(100)') 
     ,Value = attr.value('.','varchar(max)') 
From @XML.nodes('/ITEM') as A(r) 
Cross Apply A.r.nodes('./@*') AS B(attr) 
Where attr.value('local-name(.)','varchar(100)') not in ('id') 

返回第二項(這可以很容易地如果必要的話擺動)

enter image description here

編輯 - 從文件加載XML

Declare @XML xml 
Select @XML = BulkColumn FROM OPENROWSET(BULK 'C:\Working\SomeXMLFile.xml', SINGLE_BLOB) x; 

Select ID  = r.value('@id','int') 
     ,Item = attr.value('local-name(.)','varchar(100)') 
     ,Value = attr.value('.','varchar(max)') 
From @XML.nodes('/ITEM') as A(r) 
Cross Apply A.r.nodes('./@*') AS B(attr) 
Where attr.value('local-name(.)','varchar(100)') not in ('id') 
+0

我怎樣才能做到這一點與45K行xml文件?如果你願意,我可以上傳XML文件,以便檢查它。 –

+0

@ J.Litvak請參閱使用TSQL上傳文件和進程的編輯。 –