将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