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="未提供报酬或条件" />
'
@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 未提供报酬或条件
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 未提供报酬或条件
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 行受影响)