首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >改进sql server中的读XML字符串

改进sql server中的读XML字符串
EN

Stack Overflow用户
提问于 2015-06-08 06:54:54
回答 2查看 1.7K关注 0票数 3

我将xml字符串作为nvarchar(最大)发送给SP。

代码语言:javascript
复制
'<Devices><ID value="13" /><ID value="39" /></Devices>'

我用这种方式返回ID

代码语言:javascript
复制
DECLARE @DeviceIDs nvarchar(max) = N'<Devices><ID value="13" /><ID value="39" /></Devices>'
       ,@iDevice INT;
DECLARE @Devices table (DeviceId int PRIMARY KEY)
                EXEC sp_xml_preparedocument @iDevice OUTPUT, @DeviceIDs
                Insert Into @Devices(DeviceId)
                SELECT value FROM OPENXML (@iDevice, '/Devices/ID',3) WITH (value int)
                EXEC sp_xml_removedocument @iDevice 

SELECT * FROM @Devices

以前的代码运行良好,但sp_xml_preparedocument是扩展存储过程,并根据technet.microsoft.com :此特性将在Microsoft 扩展存储过程的未来版本中删除

如何在不更改xml结构的情况下获得此Ids?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-08 07:06:21

您可以使用XML类型和相关XML方法 .node / .value来实现这一点。

代码语言:javascript
复制
DECLARE @DeviceIDs XML = N'<Devices><ID value="13" /><ID value="39" /></Devices>'
SELECT  c.value('@value','int') as DeviceID
FROM @DeviceIDs.nodes('Devices/ID') as t(c)
票数 3
EN

Stack Overflow用户

发布于 2015-06-09 05:53:19

谢谢@ughai,我正在使用您的方式,但我将nvarchar转换为xml

代码语言:javascript
复制
DECLARE @DeviceIDsStr nvarchar(max) = N'<Devices><ID value="13" /><ID value="39" /></Devices>';
DECLARE @DeviceIDs XML = CAST(@DeviceIDsStr AS XML) ;
SELECT  c.value('@value','int') as DeviceID
FROM @DeviceIDs.nodes('Devices/ID') as t(c)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30702829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档