2017-01-27 38 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上传文件和进程的编辑。 –