簡體   English   中英

TSql XML查詢正在串聯值

[英]TSql xml query is concatenating values

當我查詢temp變量中的xml列時,如果xml元素具有多個值,則結果將被串聯。 以下是xml列的摘錄-

 <metadata>
   <dataType>Date</dataType>
    <tags>
      <tag>SPA</tag>
      <tag>Timed Release</tag>
    </tags>
 </metadata>

注意兩個標簽元素。 每個標記元素需要一行。 這是我的查詢

 SELECT id,
    dataType = [Type].value('(/metadata/tags)[1]', 'varchar(max)')
 FROM
@tmpProperty

產生以下

 id   | dataType
 -----+-------------------
 6357 | SPATimed Release

如果我將查詢更改為

 SELECT id,
dataType = [Type].value('(/metadata/tags/tag)[1]', 'varchar(max)')
FROM
@tmpProperty

我懂了

 id   | dataType
 -----+-----------
 6357 | SPA

兩種結果都是錯誤的。 其中一個連接成一行而不是兩行,而另一只返回一個值。 我正在使用sql server2012。如何解決此問題?

您需要先使用nodes()來獲取多行,然后才能使用value()提取數據:

DECLARE @tmpProperty TABLE (ID INT IDENTITY, [Type] XML);
INSERT @tmpProperty([Type])
VALUES ('<metadata>
   <dataType>Date</dataType>
    <tags>
      <tag>SPA</tag>
      <tag>Timed Release</tag>
    </tags>
 </metadata>');

 SELECT id,
        dataType = Tags.value('(text())[1]', 'varchar(max)')
 FROM   @tmpProperty AS t
        CROSS APPLY t.[Type].nodes('/metadata/tags/tag') AS n (Tags);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM