这里有一个方法会给你一个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](https://i.stack.imgur.com/K4WRZ.jpg)
编辑 - 从文件加载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')
你问如何反序列化这一点,并插入结构到一个表,或者是你问如何将这个XML二进制大对象到XML数据类型列? – Siyual
我想将此结构插入表中,是的。 –