Saltar al contenido

Seleccionar valores del campo XML en SQL Server 2008

Solución:

Dado que el campo XML se llama ‘xmlField’ …

SELECT 
[xmlField].value('(/person//firstName/node())[1]', 'nvarchar(max)') as FirstName,
[xmlField].value('(/person//lastName/node())[1]', 'nvarchar(max)') as LastName
FROM [myTable]

Teniendo en cuenta que los datos XML provienen de una tabla ‘tabla’ y se almacenan en un ‘campo’ de columna: use los métodos XML, extraiga valores con xml.value(), proyecto de nodos con xml.nodes(), usar CROSS APPLY unir:

SELECT 
    p.value('(./firstName)[1]', 'VARCHAR(8000)') AS firstName,
    p.value('(./lastName)[1]', 'VARCHAR(8000)') AS lastName
FROM table 
    CROSS APPLY field.nodes('/person') t(p)

Puedes deshacerte del nodes() y cross apply si cada campo contiene exactamente un elemento ‘persona’. Si el XML es una variable, selecciona FROM @variable.nodes(...) y no necesitas el cross apply.

Esta publicación fue útil para resolver mi problema, que tiene un formato XML un poco diferente … mi XML contiene una lista de claves como el siguiente ejemplo y almaceno el XML en la columna SourceKeys en una tabla llamada DeleteBatch:

<k>1</k>
<k>2</k>
<k>3</k>

Cree la tabla y rellénela con algunos datos:

CREATE TABLE dbo.DeleteBatch (
    ExecutionKey INT PRIMARY KEY,
    SourceKeys XML)

INSERT INTO dbo.DeleteBatch ( ExecutionKey, SourceKeys )
SELECT 1, 
    (CAST('<k>1</k><k>2</k><k>3</k>' AS XML))

INSERT INTO dbo.DeleteBatch ( ExecutionKey, SourceKeys )
SELECT 2, 
    (CAST('<k>100</k><k>101</k>' AS XML))

Aquí está mi SQL para seleccionar las claves del XML:

SELECT ExecutionKey, p.value('.', 'int') AS [Key]
FROM dbo.DeleteBatch
    CROSS APPLY SourceKeys.nodes('/k') t(p)

Aquí están los resultados de la consulta …

ExecutionKey    Key
1   1
1   2
1   3
2   100
2   101
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *