none
Importar TXT sin repetir registros RRS feed

  • Pregunta

  • Buenas noches estimados, es la primera vez que realizare una importación de un txt y de acuerdo a lo que he leído en los foros es utilizar el comando BULK INSERT :

    bulk insert OPE_ACOPIO
    from 'D:\DATA\PRUEBAS\acopio.txt'
    with (
    fieldterminator='_X_',
    rowterminator ='\n'
    )

    pero mi consulta es como hacer para no registrar registros del txt que ya existen en mi tabla y hay manera de seleccionar que campos de mi tabla deben registrarse ?

    De antemano agradezco su apoyo.

    Saludos!

    jueves, 15 de abril de 2021 4:36

Respuestas

  • Hola DrgunGrun:

    Puedes cargar el bulkInsert en una tabla o variable temporal y realizar el insert into tabla select * from tablaTemporal where not exists (select * from tutabla).

    Un ejemplo.

    Create table final (id int, col1 varchar(10), col2 varchar(10));
    go
    Insert into final (id, col1, col2)
    values
    (1,'a','b'),
    (2,'c','d');
    go

    Una tabla con dos filas.

    Contenido del archivo D:\Data\Pruebas\acopio.txt

    DECLARE @CsvLocation NVARCHAR(2048)= N'D:\DATA\PRUEBAS\acopio.txt';
     
    DROP TABLE IF EXISTS #tempData; 
     
    CREATE TABLE #tempData 
    (  
       id int, col1 varchar(10), col2 varchar(10)
    );
    -- Preparamos una query dinámica para leer el archivo 
     
    DECLARE @cmd NVARCHAR(2048)= 
    N'BULK INSERT #tempData'   
       + N' FROM '''
       + @CsvLocation    
       + N''''
       + N' WITH'  
       + N' (FIELDTERMINATOR = ''_X_'', 
         ROWTERMINATOR = ''\n'')'; 
     
    EXEC sp_executesql @cmd;
    
    Insert into final (id, col1, col2)
    select * from #tempData t
    where t.id not in (select id from dbo.final)
    
    Select * from dbo.final

    La forma de no incluir lo leído en lo que ya existía puede diferir. Yo he escogido la columna id, y si el mismo ya existe no inserto.

    También podrías evaluar la fila completa con exists

    Leer csv con bulkInsert

    https://javifer2.wordpress.com/2019/11/16/leer-archivo-de-texto-o-csv-e-insertar-en-tabla/

    exists

    https://javifer2.wordpress.com/2020/06/17/exists-como-se-implementa/

    • Propuesto como respuesta Alejandro 0991 jueves, 15 de abril de 2021 19:08
    • Marcado como respuesta DrgunGrun viernes, 16 de abril de 2021 6:30
    jueves, 15 de abril de 2021 5:06