数据库中只有一个表,每行为一份产品图纸的信息,如图号,图名,所属装配图号等,需要的xml文件格式如下:
其中每个item项代表一份图纸,嵌套关系按实际装配结构,即所属装配关系来构造。
<?xml version='1.0' encoding='gb2312'?>
<tree id="0">
<item drawing_id="drawing" graphname="图纸">
<item drawing_id="drawing_sp1" graphname="图纸1">
<item drawing_id="drawing_sp_sp" graphname="图纸1.1">
<item drawing_id="drawing_sp_sp_sp" graphname="图纸1.1.1"/>
</item>
</item>
<item drawing_id="drawing_sp2" graphname="图纸.2"/>
<item drawing_id="drawing_sp3" graphname="图纸.3"/>
<item drawing_id="drawing_sp4" graphname="图纸.4"/>
<item drawing_id="drawing_sp5" graphname="图纸.5"/>
<item drawing_id="drawing_sp6" graphname="图纸.6"/>
</item>
</tree>
其中每个item项代表一份图纸,嵌套关系按实际装配结构,即所属装配关系来构造。
<?xml version='1.0' encoding='gb2312'?>
<tree id="0">
<item drawing_id="drawing" graphname="图纸">
<item drawing_id="drawing_sp1" graphname="图纸1">
<item drawing_id="drawing_sp_sp" graphname="图纸1.1">
<item drawing_id="drawing_sp_sp_sp" graphname="图纸1.1.1"/>
</item>
</item>
<item drawing_id="drawing_sp2" graphname="图纸.2"/>
<item drawing_id="drawing_sp3" graphname="图纸.3"/>
<item drawing_id="drawing_sp4" graphname="图纸.4"/>
<item drawing_id="drawing_sp5" graphname="图纸.5"/>
<item drawing_id="drawing_sp6" graphname="图纸.6"/>
</item>
</tree>
为什么用for xml不太容易达到目标, 觉得可以的啊.
--openxml可以用meta属性,得到数据在xml中的层次信息
图号, 图名, 所属装配图号
drawing 图纸 null
drawing_sp1 图纸1 drawing
drawing_sp_sp 图纸1.1 drawing_sp1
drawing_sp_sp_sp 图纸1.1.1 drawing_sp_sp
drawing_sp2 图纸 drawing
drawing_sp3 图纸 drawing
drawing_sp4 图纸 drawing
drawing_sp5 图纸 drawing
drawing_sp6 图纸 drawing
--如果嵌套的次数也不清楚的话,那我就不会做了
DECLARE @hDoc int
declare @doc varchar(8000)
declare @xpath nvarchar(40)
declare @loop int, @i int
create table result(图号 varchar(20), 图名 varchar(20),
所属装配图号 varchar(20),
id int,
parent_id int)
create table #hfile ( file_text varchar(8000))
bulk insert #hfile from 'H:\temp\xml\abc.xml'
set @doc=''
select @doc=@doc+file_text from #hfile
EXEC sp_xml_preparedocument @hDoc OUTPUT, @doc--select* from #hfile
--循环读取xml的数据
select @xpath='/tree/item', @i=0, @loop=10 --设置嵌套的次数
while @i<@loop
begin
insert result(图号, 图名,id, parent_id)
select *
from openxml(@hDoc, @xpath)
with (图号 varchar(20) './@drawing_id',
图名 varchar(20) './@graphname',
id int '@mp:id',
parent_id int '@mp:parentid')
select @xpath=@xpath+'/item', @i=@i+1
endselect t1.图号, t1.图名, t2.图号 as 所属装配号
from result t1 left join result t2 on t1.parent_id=t2.id
--扫尾
drop table #hfile
drop table result
drawing 图纸 null
drawing_sp1 图纸1 drawing
drawing_sp_sp 图纸1.1 drawing_sp1
drawing_sp_sp_sp 图纸1.1.1 drawing_sp_sp
drawing_sp2 图纸 drawing
drawing_sp3 图纸 drawing
drawing_sp4 图纸 drawing
drawing_sp5 图纸 drawing
drawing_sp6 图纸 drawing而通过查询此表想得到我上文提到那种格式的xml结果,如果用forXML语句,因为只有一个表,用auto模式怎么才能反映出各行数据的所属关系呢?用explicit模式太复杂,目前还没想到什么办法。
希望能有人前来指点一下!
原来我做的是从xml到关系表,而楼主要是从关系表到xml。
呵呵,用for xml好像是很有点复杂。不会, 关注