微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SqlServer2005 提取xml相关内容为行集的方法

Author:水如烟

 

在我的blog中,专辟了一个专题[资源与数据]来提供一些公用的代码数据,这些代码数据是国标或国家有关部门、或行业发布的,只是我现在手头的或已经提交的,都没有提供出处,或许以后会补充上来。

这些代码数据都以xml方式发表。

如何把这些数据转为需要的行集呢,下面提供两种方法

已知

DECLARE
     
@xml  xml
    ,
@Info   nvarchar ( max )

SET   @Info   =  N '
<!--LzmTW(水如烟) 20080101合同终止原因-->
<row Code="00" Value="其他" />
<row Code="01" Value="期满或约定条件终止" />
<row Code="02" Value="协商一致解除" />
<row Code="03" Value="试用期内" />
<row Code="04" Value="严重违纪" />
<row Code="05" Value="失职舞弊重大损害" />
<row Code="06" Value="追究刑事责任" />
<row Code="07" Value="患除或非因工负伤" />
<row Code="08" Value="不能胜任工作" />
<row Code="09" Value="客观情况重大变化" />
<row Code="10" Value="频临破产经营困难" />
<row Code="11" Value="劳动者提出解除" />
<row Code="12" Value="强迫劳动" />
<row Code="13" Value="未提供报酬或条件" />
'

OPENXML

SET   @Info   =  N ' <root> '   +   @Info   +  N ' </root> '

DECLARE   @docHandle   int
EXEC  sp_xml_preparedocument  @docHandle  OUTPUT,  @Info

SELECT   *  
FROM  OPENXML( @docHandle , N ' /root/row '
WITH  ( [ Code ]   nchar ( 2 ' @Code ' [ Value ]   nvarchar ( 20 ' @Value ' )

EXEC  sp_xml_removedocument  @docHandle  

/*
Code Value
---- --------------------
00   其他
01   期满或约定条件终止
02   协商一致解除
03   试用期内
04   严重违纪
05   失职舞弊重大损害
06   追究刑事责任
07   患除或非因工负伤
08   不能胜任工作
09   客观情况重大变化
10   频临破产经营困难
11   劳动者提出解除
12   强迫劳动
13   未提供报酬或条件

(14 行受影响)
*/

Query

SET   @xml   =   CAST (N ' <root> '   +   @Info   +  N ' </root> '   AS  xml)

SELECT   
     T.c.value(N
' @Code ' ' nvarchar(2) ' AS   [ Code ]
    ,T.c.value(N
' @Value ' ' nvarchar(10) ' AS   [ Value ]
FROM   @xml .nodes( ' /root/row ' ) T(c)

/*
Code Value
---- ----------
00   其他
01   期满或约定条件终止
02   协商一致解除
03   试用期内
04   严重违纪
05   失职舞弊重大损害
06   追究刑事责任
07   患除或非因工负伤
08   不能胜任工作
09   客观情况重大变化
10   频临破产经营困难
11   劳动者提出解除
12   强迫劳动
13   未提供报酬或条件

(14 行受影响)
*/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐