5

我有一个 SQL 查询,它返回下面的 XML

<row>
  <urlSegment>electronics</urlSegment>
  <shortenedUrlSegment>0x58</shortenedUrlSegment>
</row>
<row>
  <urlSegment>phones</urlSegment>
  <shortenedUrlSegment>0x5AC0</shortenedUrlSegment>
</row>
<row>
  <urlSegment>curvy-simplicity</urlSegment>
  <shortenedUrlSegment>65546</shortenedUrlSegment>
</row>

ETC

我想要的输出是一个包含两列(Url 和 ShortenedUrl)的表格,其中数据以 url 方式连接,如下所示。

Url                                  | ShortenedUrl
electronics/phones/curvy-simplicity  | 0x58/0x5AC0/65546

ETC

任何人都可以帮忙吗?

最好的问候

4

2 回答 2

7

你可以像这样使用 xquery:

select
    stuff(
        @data.query('
            for $i in row/urlSegment return <a>{concat("/", $i)}</a>
        ').value('.', 'varchar(max)')
    , 1, 1, '') as Url,
    stuff(
        @data.query('
            for $i in row/shortenedUrlSegment return <a>{concat("/", $i)}</a>
        ').value('.', 'varchar(max)')
    , 1, 1, '') as ShortenedUrl

sql fiddle demo

于 2013-10-03T20:36:10.763 回答
1

尝试这个:

DECLARE @input XML

SET @input = '<row>
  <urlSegment>electronics</urlSegment>
  <shortenedUrlSegment>0x58</shortenedUrlSegment>
</row>
<row>
  <urlSegment>phones</urlSegment>
  <shortenedUrlSegment>0x5AC0</shortenedUrlSegment>
</row>
<row>
  <urlSegment>curvy-simplicity</urlSegment>
  <shortenedUrlSegment>65546</shortenedUrlSegment>
</row>'

SELECT
    Url = XRow.value('(urlSegment)[1]', 'varchar(100)'),
    ShortenedUrl =XRow.value('(shortenedUrlSegment)[1]', 'varchar(100)')
FROM
    @input.nodes('/row') AS XTbl(XRow)

.nodes()您提供一系列 XML 片段,每个片段对应 XML 中的每个<row>节点。然后你可以“进入”那个<row>元素并找出包含的子元素。

于 2013-09-18T05:32:17.777 回答