将TSQL XML字段转换为多列
我有以下数据集:将TSQL XML字段转换为多列,xml,tsql,Xml,Tsql,我有以下数据集: Index | xml A | <book><name>A book 1</name><book> B | <book><name>B book 1</name><book><book><name>B book 2</name><book> 我最后需要的是这张表: 索引|书名 A
Index | xml
A | <book><name>A book 1</name><book>
B | <book><name>B book 1</name><book><book><name>B book 2</name><book>
我最后需要的是这张表:
索引|书名
A | A Book 1
B | B Book 1
B | B Book 2
我似乎从这个查询中得到的是:
A | A Book 1
B | B Book 1 B Book 2
我哪里做错了?如何区分字段?这是如何工作的,我不知道。我对XML很在行。我只是看了一些例子,然后把它们放在一起。希望这有帮助
DECLARE @BookCache TABLE ([Index] CHAR,[xml] XML);
INSERT INTO @BookCache
VALUES ('A','<book><name>A book 1</name></book>'),
('B','<book><name>B book 1</name></book><book><name>B book 2</name></book>');
SELECT [Index],
BookNameNode.value('(text())[1]','VARCHAR(25)') AS Name
FROM @BookCache
CROSS APPLY [Xml].nodes('/book/name') AS [test](BookNameNode)
你能提供你从哪里抓到的吗!?这正是我一直在寻找的!谷歌似乎给我带来了一堆垃圾!哈哈:)我从公认的答案中得到了一个例子:
DECLARE @BookCache TABLE ([Index] CHAR,[xml] XML);
INSERT INTO @BookCache
VALUES ('A','<book><name>A book 1</name></book>'),
('B','<book><name>B book 1</name></book><book><name>B book 2</name></book>');
SELECT [Index],
BookNameNode.value('(text())[1]','VARCHAR(25)') AS Name
FROM @BookCache
CROSS APPLY [Xml].nodes('/book/name') AS [test](BookNameNode)
Index Name
----- -------
A A book 1
B B book 1
B B book 2