如何将其插入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文件执行此操作?
答案 0 :(得分: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')
退货(必要时可以很容易地转动)
编辑 - 从文件加载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')
答案 1 :(得分:0)
重新询问Siyual的问题,但更具体:
这一行中有哪一行应该进入表格吗?
它不是嵌套的吗?
换句话说,它会继续重复<ITEM id= [...] desc="something" />
吗?如果答案是肯定的,请考虑一个perl脚本,它在等号之后选取所有内容,并在双引号之间并连接获得的位,用逗号分隔它们,每<ITEM [...] />
创建一行。
这样,您就可以获得要加载的CSV文件。当然,您必须先创建目标表。