在sql server中使用openxml解析多个xml标记 [英] parsing multiple xml tags using openxml in sql server

查看:143
本文介绍了在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆