2011-04-26 126 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