Скажем, у меня есть следующая таблица (где History - это столбец xml):
Id Value History
1 "Hello" <History>
<Node date="1-1-2011">World</Node>
<Node date="1-2-2011">Foo</Node>
<Node date="1-3-2011">Bar</Node>
</History>
2 "Baz" <History>
<Node date="1-1-2011">Buzz</Node>
<Node date="1-2-2011">Fizz</Node>
<Node date="1-3-2011">Beam</Node>
</History>
И из этого я хотел выбрать новую таблицу, например:
HistoryId Id Value Date
1 1 "World" 1-1-2011
2 1 "Foo" 1-2-2011
3 1 "Bar" 1-3-2011
4 2 "Buzz" 1-1-2011
5 2 "Fizz" 1-2-2011
6 2 "Beam" 1-3-2011
Как быЯ делаю это?
Если бы это было просто автономное значение XML, я мог бы сделать что-то вроде этого:
DECLARE @xml2 XML = '
<History>
<Node date="1-1-2011">World</Node>
<Node date="1-2-2011">Foo</Node>
<Node date="1-3-2011">Bar</Node>
</History>'
SELECT
x.value('(@date)[1]','date') AS [Date]
,x.value('.', 'nvarchar(50)') AS Value
FROM @xml2.nodes('/History/Node') temp(x)
Но я не уверен, как это сделать, когда данные XML являются частьюстолбца таблицы.Я мог бы, вероятно, найти способ сделать это с помощью cursor
, но мне было интересно, есть ли более элегантное декларативное решение, о котором я не знаю.