martes, 18 de septiembre de 2007

Arrays por parámetro a un Stored Procedure de SQL Server

Debido a un mantenimiento que estaba realizando necesitaba enviar un array con fechas a un procedimiento almacenado de SQL Server. Esto es mucho más rápido que realizar una llamada al procedimiento para cada elemento.

Ahí va el ejemplo:

Estructura XML (faltan los simbolos de mayor y menor porque el sistema los interpreta y no los muestra):

SolicitudVacaciones
dia valor = "Fecha1" /
dia valor = "Fecha2" /
dia valor = "Fechan" /
/SolicitudVacaciones

CREATE PROCEDURE spUtilizarArrayXML
@sFechasXML AS VARCHAR(8000)
AS
DECLARE @idoc INT
-- Creamos la tabla temporal que tendrá los datos de la estructura XML
CREATE TABLE #DiasSolicitados (DiaSolicitado VARCHAR(10))

-- Este procedimiento almacenado carga en memoria la estructura XML y guarda una referencia en @idoc
EXEC sp_xml_preparedocument @idoc OUTPUT, @sFechasXML

-- Insertamos los datos en la tabla temporal
INSERT INTO #DiasSolicitados Select * FROM OpenXml(@idoc,'SolicitudVacaciones/dia', 1)
WITH (valor VARCHAR(10))

-- Aquí iría el código utilzando los valores recien insertados en la tabla temporal

-- Finalmente se libera de la memoria el documento XML y la tabla temporal
exec sp_xml_removedocument @idoc output
DROP TABLE #DiasSolicitados

No hay comentarios: