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

本文介绍了如何使用SQLServer2005从XML数据中提取内容并转换为行集,提供了两种方法,包括OPENXML和Query操作。适合需要处理XML数据的数据库管理员参考。
摘要由CSDN通过智能技术生成

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 行受影响)
*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值