none
AYUDA!!! Inserción y actualización de registros en una tabla con archivo csv RRS feed

  • Pregunta

  • Hola a todos.

    Me encuentro realizando un SP el cual toma una archivo csv se carga a una tabla TMP y de acuerdo a los registros informados en el archivo, realiza la insercion o actualización de registros en una tabla final y me está sucediendo lo siguiente:

    Cuando la tabla está totalmente vacía me inserta lo registros, lo cual es correcto, pero al momento de que el archivo que se carga tiene algunos de los registros ya insertados y un nuevo registro no insertado, solo me está actualizando los registros que ya se insertaron y no me inserta el nuevo registro.

    A continuación les comparto de como lo estoy haciendo, para que por fa me colaboren indicándome que ando haciendo mal.

    Muchas gracias.

    IF NOT EXISTS (SELECT A.PLACA, A.ID_ROM
    FROM TBL_CERTI_GNV AS A, #ImportSUIC AS B 
    WHERE A.PLACA = B.R_PLACA AND A.ID_ROM= B.R_ID_ROM)

    BEGIN

    INSERT INTO TBL_CERTI_GNV 
    (PLACA, ID_ROM,NIT_DISTRIBUIDOR,NIT_TALLER_CONV,                         
    NIT_CERTIFICADOR,FECHA_CERTIFICACION_INICIAL,
    FECHA_ULTIMA_REVISION,FECHA_PROXIMA_REVISION,
    BOTON_HABILITADO,CIUDAD,USUARIO_INGRESA_DATOS,FECHA_PROCESAMIENTO) 
    SELECT R_PLACA, R_ID_ROM, D_NIT_DISTRIBUIDOR,D_NIT_TALLER_CONV,        
    D_NIT_CERTIFICADOR,F_FECHA_CERTIFICACION_INICIAL,
    F_FECHA_ULTIMA_REVISION,F_FECHA_PROXIMA_REVISION,      
    D_BOTON_HABILITADO,R_CIUDAD,D_USUARIO_INGRESA_DATOS, GETDATE()
    FROM #ImportSUIC 
       END

    ELSE BEGIN
    UPDATE TBL_CERTI_GNV
    SET FECHA_PROXIMA_REVISION = B.F_FECHA_PROXIMA_REVISION,
    FECHA_PROCESAMIENTO =  GETDATE()
    FROM TBL_CERTI_GNV AS A, #ImportSUIC AS B 
    WHERE A.PLACA = B.R_PLACA AND A.ID_ROM= B.R_ID_ROM
    PRINT 'ENTRA A ACTUALIZAR'
    END


    Yamid Pertuz

    martes, 13 de diciembre de 2016 19:19

Respuestas

  • Yamid88,

    ¿Qué versión del motor de base de datos ocupas? ¿igual o posterior a 2008? De ser así podrías usar la instrucción Merge.

    MERGE dbo.TBL_CERTI_GNV AS t
    USING ( 
    	   SELECT 
    		  R_PLACA, R_ID_ROM, D_NIT_DISTRIBUIDOR, D_NIT_TALLER_CONV,        
    		  D_NIT_CERTIFICADOR, F_FECHA_CERTIFICACION_INICIAL,
    		  F_FECHA_ULTIMA_REVISION, F_FECHA_PROXIMA_REVISION,      
    		  D_BOTON_HABILITADO, R_CIUDAD, D_USUARIO_INGRESA_DATOS
    	   FROM #ImportSUIC) AS s
    ON (t.PLACA = s.R_PLACA AND t.ID_ROM = s.R_ID_ROM)
    WHEN MATCHED THEN
        UPDATE SET 
    	   FECHA_PROXIMA_REVISION = s.F_FECHA_PROXIMA_REVISION,
    	   FECHA_PROCESAMIENTO =  GETDATE()
    WHEN NOT MATCHED THEN
        INSERT (PLACA, ID_ROM, NIT_DISTRIBUIDOR, NIT_TALLER_CONV,                         
    	   NIT_CERTIFICADOR, FECHA_CERTIFICACION_INICIAL,
    	   FECHA_ULTIMA_REVISION, FECHA_PROXIMA_REVISION,
    	   BOTON_HABILITADO, CIUDAD, USUARIO_INGRESA_DATOS, FECHA_PROCESAMIENTO) 
        VALUES (s.R_PLACA, s.R_ID_ROM, s.D_NIT_DISTRIBUIDOR, s.D_NIT_TALLER_CONV,        
    	   s.D_NIT_CERTIFICADOR, s.F_FECHA_CERTIFICACION_INICIAL,
    	   s.F_FECHA_ULTIMA_REVISION, s.F_FECHA_PROXIMA_REVISION,      
    	   s.D_BOTON_HABILITADO, s.R_CIUDAD, s.D_USUARIO_INGRESA_DATOS, GETDATE());
    GO


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Propuesto como respuesta Alberto PoblacionMVP martes, 13 de diciembre de 2016 22:24
    • Marcado como respuesta Yamid88 martes, 13 de diciembre de 2016 22:38
    • Desmarcado como respuesta Yamid88 martes, 13 de diciembre de 2016 22:39
    • Marcado como respuesta Yamid88 martes, 13 de diciembre de 2016 22:39
    martes, 13 de diciembre de 2016 22:12

Todas las respuestas

  • Yamid88,

    ¿Qué versión del motor de base de datos ocupas? ¿igual o posterior a 2008? De ser así podrías usar la instrucción Merge.

    MERGE dbo.TBL_CERTI_GNV AS t
    USING ( 
    	   SELECT 
    		  R_PLACA, R_ID_ROM, D_NIT_DISTRIBUIDOR, D_NIT_TALLER_CONV,        
    		  D_NIT_CERTIFICADOR, F_FECHA_CERTIFICACION_INICIAL,
    		  F_FECHA_ULTIMA_REVISION, F_FECHA_PROXIMA_REVISION,      
    		  D_BOTON_HABILITADO, R_CIUDAD, D_USUARIO_INGRESA_DATOS
    	   FROM #ImportSUIC) AS s
    ON (t.PLACA = s.R_PLACA AND t.ID_ROM = s.R_ID_ROM)
    WHEN MATCHED THEN
        UPDATE SET 
    	   FECHA_PROXIMA_REVISION = s.F_FECHA_PROXIMA_REVISION,
    	   FECHA_PROCESAMIENTO =  GETDATE()
    WHEN NOT MATCHED THEN
        INSERT (PLACA, ID_ROM, NIT_DISTRIBUIDOR, NIT_TALLER_CONV,                         
    	   NIT_CERTIFICADOR, FECHA_CERTIFICACION_INICIAL,
    	   FECHA_ULTIMA_REVISION, FECHA_PROXIMA_REVISION,
    	   BOTON_HABILITADO, CIUDAD, USUARIO_INGRESA_DATOS, FECHA_PROCESAMIENTO) 
        VALUES (s.R_PLACA, s.R_ID_ROM, s.D_NIT_DISTRIBUIDOR, s.D_NIT_TALLER_CONV,        
    	   s.D_NIT_CERTIFICADOR, s.F_FECHA_CERTIFICACION_INICIAL,
    	   s.F_FECHA_ULTIMA_REVISION, s.F_FECHA_PROXIMA_REVISION,      
    	   s.D_BOTON_HABILITADO, s.R_CIUDAD, s.D_USUARIO_INGRESA_DATOS, GETDATE());
    GO


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Propuesto como respuesta Alberto PoblacionMVP martes, 13 de diciembre de 2016 22:24
    • Marcado como respuesta Yamid88 martes, 13 de diciembre de 2016 22:38
    • Desmarcado como respuesta Yamid88 martes, 13 de diciembre de 2016 22:39
    • Marcado como respuesta Yamid88 martes, 13 de diciembre de 2016 22:39
    martes, 13 de diciembre de 2016 22:12
  • Muchas gracias!!!.

    Me funcionó, la versión del motor es posterior a 2008, para ser mas exacto 2014.


    Yamid Pertuz

    martes, 13 de diciembre de 2016 22:40