请教一段sp_xml_preparedocument

ufo20020427 2013-08-22 05:30:53


USE [Takewin.GMCC.RMC]
GO

DECLARE @ListEngineParamId nvarchar(max)

set @ListEngineParamId = N'<?xml version="1.0" encoding="utf-16"?>
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<string>0501</string>
<string>0502</string>
<string>0503</string>
</ArrayOfString>'


declare @hdoc int
exec sp_xml_preparedocument @hdoc output, @ListEngineParamId

Select string
From openxml(@hdoc,'/ArrayOfString',2)
with (string char(4))


exec sp_xml_removedocument @hdoc



请问上例xml,即只有两级的情况下,如何检索出三行数据
我这里只能检索出第一列
备注:不能改变xml结构
谢谢!
...全文
89 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
唐诗三百首 2013-08-22
  • 打赏
  • 举报
回复

declare @ListEngineParamId nvarchar(max)
 
set @ListEngineParamId=N'<?xml version="1.0" encoding="utf-16"?>
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <string>0501</string>
  <string>0502</string>
  <string>0503</string>
</ArrayOfString>'

select o.value('.','char(4)') 'str'
from (select cast(@ListEngineParamId as xml) 'x') t
cross apply x.nodes('/ArrayOfString/string') x(o)

/*
str
----
0501
0502
0503

(3 row(s) affected)
*/
Shawn 2013-08-22
  • 打赏
  • 举报
回复

DECLARE	@ListEngineParamId nvarchar(max)

set @ListEngineParamId = N'<?xml version="1.0" encoding="utf-16"?>
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <string>0501</string>
  <string>0502</string>
  <string>0503</string>
</ArrayOfString>'


declare @hdoc int
exec sp_xml_preparedocument @hdoc output, @ListEngineParamId	

Select string
From openxml(@hdoc,'/ArrayOfString/string',2) 
WITH (string CHAR(4) '.')

exec sp_xml_removedocument @hdoc

/*
string
0501
0502
0503
*/

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧