在sql server中使用openxml解析多个xml标记 [英] parsing multiple xml tags using openxml in sql server
本文介绍了在sql server中使用openxml解析多个xml标记的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
< test >
< DBO.JOB >
< JOB_NO > 234234 < / JOB_NO >
< CREW_NO > 64850 < / CREW_NO >
< BEGINDATE > < / BEGINDATE >
< ENDDATE > < / ENDDATE >
< /DBO.JOB>
< DBO.JOB >
< JOB_NO > 234 < / JOB_NO >
< CREW_NO > 234 < / CREW_NO >
< ; BEGINDATE > < / BEGINDATE >
< ENDDATE > < / ENDDATE >
< / DBO.JOB >
< DBO.JOB >
< JOB_NO > 324 < / JOB_NO >
< CREW_NO > 234234 < / CREW_NO >
< BEGINDATE > < / BEGINDATE >
< ENDDATE > < / ENDDATE >
< / DBO.JOB >
< /测试 >
我想知道如何仅使用OPEN XML解析这些标签并将它们更新到表DBO.JOB
解决方案
Straight来自BOL SQLSERVER2K8 ...OPENXML(/ w替换):
DECLARE @idoc int
DECLARE @doc varchar(1000)
SET @doc =''< test>
< dbo.job>
< job_no> 234234< / job_no>
< crew_no> 64850< / crew_no>
< begindate>< / begindate>
< enddate>< / enddate>
< /dbo.job>
< dbo.job>
< job_no> 234< / job_no>
< crew_no> 234< / crew_no>
< begindate>< / begindate>
< enddate>< / enddate>
< /dbo.job>
< dbo.job>
< job_no> 324< / job_no>
< crew_no> 234234< / crew_no>
< begindate>< / begindate>
< enddate>< / enddate>
< /dbo.job>
< / test> ''
这就是数据的外观。
EXEC sp_xml_preparedocument @idoc OUTPUT,@ doc
SELECT *
FROM OPENXML(@idoc,''/ test / DBO.JOB'',2)
WITH(JOB_NO int,
CREW_NO int,
BEGINDATE datetime ,
ENDDATE datetime)
OPENXML帮助说明执行使用OPENXML行集提供程序的SELECT语句。还有另一种方法可以做到这一切。但它不是通过OPENXML。请参阅XPath。相同......只是复杂。
输出:
JOB_NO CREW_NO BEGINDATE ENDDATE
~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~
234234 64850 1900-01-01 00:00:00.000 1900-01-01 00:00:00.000
234 234 1900-01-01 00 :00:00.000 1900-01-01 00:00:00.000
324 234234 1900-01-01 00:00:00.000 1900-01-01 00:00:00.000
<test>
<DBO.JOB>
<JOB_NO>234234</JOB_NO>
<CREW_NO>64850</CREW_NO>
<BEGINDATE></BEGINDATE>
<ENDDATE></ENDDATE>
</DBO.JOB>
<DBO.JOB>
<JOB_NO>234</JOB_NO>
<CREW_NO>234</CREW_NO>
<BEGINDATE></BEGINDATE>
<ENDDATE></ENDDATE>
</DBO.JOB>
<DBO.JOB>
<JOB_NO>324</JOB_NO>
<CREW_NO>234234</CREW_NO>
<BEGINDATE></BEGINDATE>
<ENDDATE></ENDDATE>
</DBO.JOB>
</test>
I want to know how to parse these tags using only OPEN XML and update them to a table DBO.JOB
解决方案
Straight from BOL SQLSERVER2K8 ... "OPENXML" (/w substitution):
DECLARE @idoc int DECLARE @doc varchar(1000) SET @doc =''<test> <dbo.job> <job_no>234234</job_no> <crew_no>64850</crew_no> <begindate></begindate> <enddate></enddate> </dbo.job> <dbo.job> <job_no>234</job_no> <crew_no>234</crew_no> <begindate></begindate> <enddate></enddate> </dbo.job> <dbo.job> <job_no>324</job_no> <crew_no>234234</crew_no> <begindate></begindate> <enddate></enddate> </dbo.job> </test> ''
That''s the look to the data.
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc SELECT * FROM OPENXML (@idoc, ''/test/DBO.JOB'',2) WITH (JOB_NO int, CREW_NO int, BEGINDATE datetime, ENDDATE datetime)
The "OPENXML" help states "Execute a SELECT statement that uses the OPENXML rowset provider". There is another way to do all this. But it''s not via OPENXML. See "XPath". Same ... JUST as complicated.
The output:
JOB_NO CREW_NO BEGINDATE ENDDATE ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 234234 64850 1900-01-01 00:00:00.000 1900-01-01 00:00:00.000 234 234 1900-01-01 00:00:00.000 1900-01-01 00:00:00.000 324 234234 1900-01-01 00:00:00.000 1900-01-01 00:00:00.000
这篇关于在sql server中使用openxml解析多个xml标记的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文