现在的位置: 首页 > 综合 > 正文

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

2013年10月22日 ⁄ 综合 ⁄ 共 1563字 ⁄ 字号 评论关闭

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 行受影响)
*/

抱歉!评论已关闭.