2011-04-26 90 views
6

我的SQL Server 2008数据库表有一个XML字段。我想从字段中选择节点以及其他字段。例如,请考虑下表:使用TSQL选择XML节点

DECLARE @TestTable AS TABLE ([Id] VARCHAR(20), [Name] XML) 
INSERT INTO @TestTable SELECT 
    '001', 
    '<Name><First>Ross</First><Last>Geller</Last></Name>' 
UNION ALL SELECT 
    '002', 
    '<Name><First>Rachel</First><Last>Green</Last></Name>' 

我想要的结果是:

001 | Ross | Geller  
002 | Rachel | Green 

这可能吗?谢谢,

回答

8

这应做到:

DECLARE @TestTable AS TABLE (
    [Id] VARCHAR(20), 
    [Name] XML 
    ) 
INSERT INTO @TestTable 
     SELECT '001', 
       '<Name><First>Ross</First><Last>Geller</Last></Name>' 
     UNION ALL 
     SELECT '002', 
       '<Name><First>Rachel</First><Last>Green</Last></Name>' 

SELECT Id, 
     x.value('(/Name/First)[1]', 'varchar(20)') AS [First], 
     x.value('(/Name/Last)[1]', 'varchar(20)') AS [Last] 
FROM @TestTable t 
CROSS APPLY [Name].nodes('/Name') AS tbl (x) 
+1

你不需要'CROSS APPLY'线在所有如果你改变'x.value'到'Name.value' – AakashM 2011-04-27 06:55:40

+2

你说得对。我以我的方式呈现了它,因为它更适用于一般情况。 – 2011-04-27 12:17:02