es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

SSIS devuelve el recuento total de filas comprometidas en la tarea Execute SQL.

Tengo una tarea SQL Ejecutada con una consulta SQL para eliminar los datos de una tabla. Estoy utilizando un bucle while para eliminar los datos por lotes y try/catch para manejar posibles fallos.

En la tarea Execute SQL Task quiero devolver el registro eliminado, por lo que he agregado parámetros de salida que capturan el registro eliminado. Pero el problema que tengo es que no puedo capturar/devolver el registro eliminado (que ya está confirmado) en caso de fallo.

Estoy usando la lógica SQL siguiente:

Declare @DeletedRows INT = 0
BEGIN TRY
BEGIN TRANSACTION
While (@deletedrows < @rowstodelete)
BEGIN
Eliminar registros donde la condición sea igual
SET @deletedrows = @deletedrows + @@rowcount
END
COMMIT TRANSACTION
SET ? = @deletedrows —- devolviendo registros eliminados al parámetro de salida de la tarea de SQL ejecución
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK
RAISERROR (CAPTURAR ERRORES);
END CATCH

¿Alguna idea de cómo puedo devolver los registros eliminados o confirmados al parámetro de salida de Execute SQL Task?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Solución

    Puede utilizar la cláusula OUTPUT en su sentencia DELETE para devolver los registros eliminados. La cláusula OUTPUT devolverá los registros eliminados antes de que se confirme la transacción.

    Por ejemplo:

    Declare @DeletedRows INT = 0
    BEGIN TRY
        BEGIN TRANSACTION 
            While (@deletedrows < @rowstodelete) 
            BEGIN 
              Delete registros where condition is match 
              OUTPUT deleted.* INTO #tempTable
              SET @deletedrows = @deletedrows + @@rowcount  
            END
    COMMIT TRANSACTION 
    SET ? = @deletedrows   ---- devolviendo los registros eliminados al parámetro de salida de la tarea execute sql
        END TRY
        BEGIN CATCH
          IF @@TRANCOUNT > 0
             ROLLBACK
        RAISERROR (CAPTURE ERRORES);
        END CATCH
    

    Luego puede utilizar #tempTable para devolver los registros eliminados al parámetro de salida de la tarea Execute SQL Task.

Comments are closed.