Buscar este blog

lunes, 4 de marzo de 2013

Pasar XML a stored procedure en SQLServer 2005 o superior

Hola, hace tiempo vimos como pasar un XML a un sp en SQL2005, hoy les traigo una forma mas eficiente de pasar un xml por parámetro que funciona en 2005 o superior.

La diferencia principal radica que ahora si mandamos un tipo de datos XML propio del manejador de base de datos.
Ejemplo:


CREATE PROC spPrueba
@sXML XML
AS
BEGIN 
-- Logica
END


Si mal no recuerdo el tipo de dato XML esta disponible a partir de la version 2005 de SQLServer y por lo tanto pueden aplicar la lectura de ese xml de la siguiente forma:



SELECT t.value('./@Clave','INT'),
t.value('./@Descripcion','VARCHAR(30)')
FROM @sXML.nodes('//row') x(t)


Donde @sXML es nuestro parametro, y "row" es nuestro nodo de cada elemento de nuestro xml, y por medio de "t" y la funcion "value" obtenemos nuestro valor de cada propiedad de nuestro nodo.

Les dejo aquí un ejemplo completo:


CREATE PROC spPrueba
@sXML XML
AS
BEGIN 
SELECT t.value('./@Clave','INT'),
t.value('./@Descripcion','VARCHAR(30)')
FROM @sXML.nodes('//row') x(t) 
END

go

--Ejecuto sp
EXEC dbo.spPrueba @sXML = '<row Clave="1" Descripcion="Dato 1" />
<row Clave="2" Descripcion="Dato 2" />' -- xml

go

DROP PROC spPrueba

De igual manera como lo hicimos en el ejemplo pasado podrian ejecutar un insert select para guardar directo en su tabla o en unta tabla temporal para procesar la información.

Espero que les sea de utilidad....
---------------------------------------
Lo que se puede imaginar... se puede programar

Nota: Articulo anterior: http://ganda-csharp.blogspot.mx/2012/07/pasar-un-xml-por-parametro-un-stored.html