2011-04-26 25 views
6

Mi tabla de base de datos de SQL Server 2008 tiene un campo XML. Me gustaría seleccionar nodos del campo, junto con otros campos. Por ejemplo, considere la siguiente tabla:Seleccionar nodos XML utilizando TSQL

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>' 

Quiero que el resultado sea:

001 | Ross | Geller  
002 | Rachel | Green 

¿Es posible? Gracias,

Respuesta

8

Esto debe hacerlo:

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

que no es necesario la línea APPLY' CRUZ 'en absoluto si cambia' 'x.value' a Name.value' – AakashM

+2

Tienes razón. Lo presenté de la manera en que lo hice porque es más aplicable al caso general. –

Cuestiones relacionadas