這可能看起來像重復,但我能找到的是從內部元素的節點獲取多行,比如
<products>
<product>
<image>url1</image>
</product>
<product>
<image>url1</image>
</product>
</products>
我所擁有的是表中的 XML 欄位(以 PLU 作為整數)
<product>
<images>
<image>url1</image>
<image>url2</image>
<image>url3</image>
</images>
</product>
我想
image
-----
url1
url2
url3
我試過了
select a.image.value('image','nvarchar(max)') as image
from products r
cross apply r.xml.nodes('/product/images') a(image) where PLU='8019'
但這給了
XQuery [products.xml.value()]: 'value()' requires a singleton (or empty sequence),
found operand of type 'xdt:untypedAtomic *'
因為我想要每個節點的值,而不是子節點的值,所以我嘗試了
select a.image.value('.','nvarchar(max)') ...
但這只給了我一行url1url2url3連接所有網址的行。
select a.image.value('image[1]','nvarchar(max)')
只給url1
uj5u.com熱心網友回復:
請嘗試以下解決方案。
SQL
-- DDL and sample data population, start
DECLARE @tbl TABLE (ID INT IDENTITY PRIMARY KEY, xmldata XML);
INSERT @tbl (xmldata) VALUES
(N'<product>
<images>
<image>url1</image>
<image>url2</image>
<image>url3</image>
</images>
</product>');
-- DDL and sample data population, end
SELECT ID
, c.value('text()[1]','nvarchar(max)') AS image_url
FROM @tbl
CROSS APPLY xmldata.nodes('/product/images/image') AS t(c);
輸出
---- -----------
| ID | image_url |
---- -----------
| 1 | url1 |
| 1 | url2 |
| 1 | url3 |
---- -----------
uj5u.com熱心網友回復:
比 Yitzhak Khabhinsky 更短的解決方案是 Martin Boje Carpentier 在其他地方提出的,但我會將積分獎勵給 Yitzhak
select a.image.value('.','nvarchar(max)') as image
from products r
cross apply r.xml.nodes('/product/images/*') a(image) where PLU='8019'
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/490151.html
