none
Modificar tablas en bucle RRS feed

  • Pregunta

  • Hola, espero puedan ayudarme,

    necesito eliminar un documento de cuatro tablas según el numero de documento, he logrado eliminar uno por uno, pero ahora tengo muchos que eliminar y quiero modificar el código para que me permita eliminar varios en una sola consulta.

    les dejo el código que tengo para eliminar uno por uno. Espero puedan ayudarme. Gracias

    Declare @TIPO varchar(2);
    Declare @DOC varchar(12);
    Declare @CIA varchar(8);

    set @TIPO ='BL'
    set @DOC ='001-0013089'
    set @CIA ='00102030'

    if ( (select estado from CO_Documento where TipoDocumento =@TIPO and NumeroDocumento =@DOC and CompaniaSocio =@CIA)='AN'  )
    begin
    delete from CO_Impuesto where TipoDocumento =@TIPO and NumeroDocumento =@DOC and CompaniaSocio =@CIA 
    delete from CO_cobros where TipoDocumento =@TIPO and NumeroDocumento =@DOC and CompaniaSocio =@CIA
    delete from CO_Detalles where TipoDocumento =@TIPO and NumeroDocumento =@DOC and CompaniaSocio =@CIA
    delete from CO_Documento where TipoDocumento =@TIPO and NumeroDocumento =@DOC and CompaniaSocio =@CIA
    select 'EL DOCUMENTO HA SIDO ELIMINADO' as Mensaje
    end
    else
    select 'EL DOCUMENTO NO EXISTE O NO HA SIDO ANULADO' as Mensaje;


    jueves, 18 de octubre de 2018 13:49

Todas las respuestas

  • Si esto este codigo es parte de un procedimiento almacenado, entonces pasale un parametro tipo tabla con todos los documentos a eliminar.

    CREATE TYPE dbo.DocumentoTablaTipo AS TABLE (
    documento varchar(12) NOT NULL,
    tipo varchar(2) NOT NULL,
    cia varchar(8) NOT NULL
    );
    GO
    CREATE PROCEDURE dbo.usp_eliminar_documentos
    @tvp DocumentoTablaTipo READONLY
    AS
    SET NOCOUNT ON;
    
    BEGIN TRY
        BEGIN TRANSACTION;
    
        DELETE 
            co_impuesto
        FROM 
            @tvp AS T 
            INNER JOIN 
            co_documento AS D 
            ON D.NumeroDocumento = T.documento
            AND D.TipoDocumento = T.tipo
            AND D.CompaniaSocio = T.cia
        WHERE
            D.Estado = 'AN'
            AND co_impuesto.NumeroDocumento = D.NumeroDocumento
            AND co_impuesto.TipoDocumento = D.TipoDocumento
            AND co_impuesto.CompaniaSocio = D.CompaniaSocio;
    
        DELETE
            co_cobros
        ...
    
        COMMIT TRANSACTION;
        RETURN 0;
    END TRY
    BEGIN CATCH
        IF @@trancount > 0 ROLLBACK TRANSACTION;
        THROW;
    END CATCH;
    GO
    DECLARE @T dbo.DocumentoTablaTipo;
    
    INSERT INTO @T 
    	(documento, tipo, cia)
    VALUES 
    	('001-0013089', 'BL', '00102030'),
    	('001-0013090', 'BL', '00102030'),
    	('001-0013091', 'BL', '00102030');
    
    EXEC dbo.usp_eliminar_documentos @T;
    GO



    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas


    jueves, 18 de octubre de 2018 14:27
  • Muchas gracias, lo probaré y te comento.
    jueves, 18 de octubre de 2018 15:24
  • Lo acabo de probar y va de maravilla, muchas gracias!
    viernes, 19 de octubre de 2018 2:50