diciembre 11, 2006

Inserciones, Actulizaciones y Borrados masivo de registros

En el siguiente ejemplo se expone como hacer Deletes y Updates masivamente con el uso de XML, sólo es necesario pasar el árbol XML al store procedure para leerlo y especificarlo en las intrucciones delete y update. La´página web referencia es:

http://support.microsoft.com/kb/316244/es

Cadena xml válida que recibe el sp:


CREATE PROCEDURE sps_CancelaCargosXContratoTelXML
@xmlCargosxContrato varchar(8000) AS

DECLARE @idoc int --xmlDoc

--Ejecutar el sp que carga en memoria el docuemnto XML.
EXEC sp_xml_preparedocument @idoc output, @xmlCargosxContrato

--Comienza la transacción
BEGIN TRANSACTION
--Actualizar el Status de los cargos a Cancelado.

UPDATE Tel_CargosxContrato SET Tel_CargosxContrato.Status = 'CANCELADO'FROM OPENXML (@idoc, '/CargosxContrato/Concepto')
WITH (CargoUid varchar(11)) Tel_CargosxContratoXML
WHERE Tel_CargosxContrato.Uid = Tel_CargosxContratoXML.CargoUid

--Verificar si hubo errores saltar al bloque manejador.

IF @@Error != 0
GOTO ERROR_HANDLER
--Eliminar cargos de la tabla TEL_Cobranza

Delete Tel_cobranza
FROM OPENXML (@idoc, '/CargosxContrato/Concepto')
WITH (CargoUid varchar(11)) CobranzaXMLWHERE Tel_Cobranza.Uid = CobranzaXML.CargoUid

--Verificar si hubo errores saltar al bloque manejador.
IF @@Error != 0
BEGIN
GOTO ERROR_HANDLE

--Finalizar la Transacción pues todo salió bien.
COMMIT TRANSACTION
SET NOCOUNT OFF
--Descargar documento XML de la memoria.
EXEC sp_xml_removedocument @idoc
RETURN 0

--Manejador de Error.
ERROR_HANDLER:
ROLLBACK TRANSACTION--Descargar documento XML de la memoria.EXEC sp_xml_removedocument @idoc
SET NOCOUNT OFF
RETURN 0
GO

No hay comentarios.: