在 SQL Server 中,我有一個帶有 XML 列的表,并且從每個 XML 中,我在父節點下都有節點,我想將節點中的每個值選擇到每個 XML 的單獨行中。
我該如何做到這一點?
以下是該表的外觀示例:
Name | Message
John | <User><Data><Valuelist><Value>123</Value><Value>456</Value><Value>789</Value><Value>654</Value></ValueList></Data></User>
Jack | <User><Data><ValueList><Value>555</Value><Value>455</Value></ValueList></Data></User>
Jane | <User><Data><Valuelist><Value>576</Value><Value>854</Value><Value>933</Value></ValueList></Data></User>
為了更清楚起見,下面是我嘗試查詢的 Message 列中的示例 XML:
<User>
<Data>
<ValueList>
<Value>123</Value>
<Value>456</Value>
<Value>789</Value>
<Value>654</Value>
</ValueList>
</Data>
</User>
以下是我希望在結果中看到的內容:
Name | Values
John | 123
John | 456
John | 789
John | 654
Jack | 555
Jack | 455
Jane | 576
Jane | 854
Jane | 933
我一直在嘗試使用以下查詢:
select t.Name, x.y.value('(Value)', 'nvarchar(10)') [Values]
from TABLE t
cross apply t.Message.nodes('//ValueList') as x(y)
但它給了我以下錯誤:
'value()' 需要一個單例(或空序列),找到型別為 'xdt:untypedAtomic *' 的運算元
我只能使用以下方法選擇其中一個值:
select t.Name, x.y.value('(Value[1])', 'nvarchar(10)') [Values]
from TABLE t
cross apply t.Message.nodes('//ValueList') as x(y)
我一直在谷歌搜索,但找不到我想做的事情。
我應該在這里做什么?
我的 SQL 服務器版本是 2016 SP2。
提前致謝!
uj5u.com熱心網友回復:
請嘗試以下解決方案。
SQL
-- DDL and sample data population, start
DECLARE @tbl table (ID INT IDENTITY PRIMARY KEY, Name VARCHAR(20), Message XML);
INSERT INTO @tbl (Name, Message) VALUES
('John', N'<User><Data><ValueList><Value>123</Value><Value>456</Value><Value>789</Value><Value>654</Value></ValueList></Data></User>'),
('Jack', N'<User><Data><ValueList><Value>555</Value><Value>455</Value></ValueList></Data></User>'),
('Jane', N'<User><Data><ValueList><Value>576</Value><Value>854</Value><Value>933</Value></ValueList></Data></User>');
-- DDL and sample data population, end
SELECT t.ID, t.Name
, c.value('(./text())[1]', 'nvarchar(10)') AS [Values]
FROM @tbl AS t
CROSS APPLY Message.nodes('/User/Data/ValueList/Value') as t1(c);
輸出
---- ------ --------
| ID | Name | Values |
---- ------ --------
| 1 | John | 123 |
| 1 | John | 456 |
| 1 | John | 789 |
| 1 | John | 654 |
| 2 | Jack | 555 |
| 2 | Jack | 455 |
| 3 | Jane | 576 |
| 3 | Jane | 854 |
| 3 | Jane | 933 |
---- ------ --------
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/481359.html
