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.:
Publicar un comentario