首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TSQL中的xml.value仅返回1条记录

TSQL中的xml.value仅返回1条记录
EN

Stack Overflow用户
提问于 2011-12-03 01:08:11
回答 2查看 1.9K关注 0票数 1

我有一个很短的两条记录的XML文本,但是当我运行.value时,我只得到第一条记录。如何获取仅包含值的表列表?

代码语言:javascript
复制
declare @x as xml

set @x = '<?xml version="1.0" encoding="UTF-8"?>
          <vehicle> 
              <vehicleid>54142</vehicleid> 
              <networkid>21301</networkid> 
              <description>Demo #54143</description>
          </vehicle>
          <vehicle> 
              <vehicleid>54143</vehicleid> 
              <networkid>213101</networkid> 
              <description>Demo #54143</description>
          </vehicle> '

SELECT @x.query('/*')

SELECT @x.value('(/vehicle/vehicleid/text())[1]', 'varchar(50)') as vehicleid, 
  @x.value('(/vehicle/description/text())[1]', 'varchar(50)') as description 

go

结果:

代码语言:javascript
复制
<vehicle><vehicleid>54142</vehicleid><networkid>21301</networkid><description>Demo #54143</description></vehicle> (WRAP to next line)
<vehicle><vehicleid>54143</vehicleid><networkid>213101</networkid><description>Demo #54143</description></vehicle>

(1 row(s) affected)

vehicleid                                          description
54142                                              Demo #54143

(1 row(s) affected)
EN

回答 2

Stack Overflow用户

发布于 2011-12-03 01:17:39

试试这个(有关详细信息,请参阅 ):

代码语言:javascript
复制
SELECT T.C.value('(vehicleid/text())[1]', 'varchar(50)') as vehicleid, 
  T.C.value('(description/text())[1]', 'varchar(50)') as description
from @x.nodes('//vehicle') as T(C)

@x.value返回单个值,因此您需要从节点集合中进行查询才能获得多个结果。

票数 1
EN

Stack Overflow用户

发布于 2011-12-03 01:18:55

使用:

代码语言:javascript
复制
SELECT t.c.value('(vehicleid)[1]', 'varchar(50)') [vehicleid]
    , t.c.value('(description)[1]', 'varchar(50)') [description]
FROM @x.nodes('//vehicle') t(c)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8359954

复制
相关文章

相似问题

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