Ejecución Masiva de un Procedimiento Almacenado + XML

Hola Gente,

Continuando con el tratamiento de XML con SQL Server 2005, al igual que el anterior post, donde comentábamos como efectuar masivamente actualizaciones , inserciones, etc. En esta oportunidad , ejecutaremos masivamente un procedimiento almacenado teniendo  como fuente de sus parámetros un XML.

Al igual que en el caso anterior, le pasamos como parámetro un tipo XML , internamente construye una estructura, y la insertamos en un Tabla Temporal, luego ejecutamos el Procedimiento Almacenado tantas veces como registros tenga, claro cuando insertamos sobre la tabla temporal insertamos los datos del XML que son parámetros del Procedimiento a ejecutar masivamente.

Esto también lo podríamos usar utilizando un CURSOR , pero para que complicarnos, con una Tabla Temporal Basta.

Código:

image

Procedimiento almacenado:

El procedimiento “usp_EJECUTAR” lo vamos a ejecutar tantas veces como registros tenga mi tabla temporal, ya que esta fue insertada desde mi XML.

OJO: “OPENXML(@hDoc, ‘/DocumentElement/Table’)” el Nombre “Table” depende mucho la mi fuente de datos a expotar del XML ,si es un DataTable este se llamaria tambien “Table”.

CREATE PROCEDURE [dbo].[usp_Ejectuar_Procedimiento]

@XML xml,

@FechaInicial datetime,

@FechaFinal datetime

AS

BEGIN

DECLARE @hDoc int

EXEC sp_xml_preparedocument @hDoc OUTPUT, @XML

CREATE TABLE #Temp

(

CodigoPersonaId int identity(1,1),

CodigoPersona char(12)

)

INSERT INTO #Temp

(

CodigoPersona

)

SELECT

CodigoPersona

FROM OPENXML(@hDoc, ‘/DocumentElement/Table’)

WITH

(

CodigoPersona char(12) ‘CodigoPersona’

)XMLInsert

DECLARE @Loop INT

DECLARE @Counter INT

DECLARE @CodigoPersona CHAR(12)

SET @Loop = isnull((SELECT count(*) FROM #Temp),0)

SET @Counter = 1

WHILE @Loop >0 and @Counter <= @Loop

BEGIN

SELECT

@CodigoPersona = CodigoPersona

FROM

#Temp

WHERE

CodigoPersonaId = @Counter

SET @Counter = @Counter + 1

EXEC usp_EJECUTAR @FechaInicial, @FechaFinal,@CodigoPersona

END

EXEC sp_xml_removedocument @hDoc

END

Bueno , espero les sea de Ayuda.

Un Saludo desde “La Virgen” – Huamachuco, Perú a 3500 msnm

José Fabricio Rojas


Acerca de esta Entrada