Importare file txt in sql server tramite ODBC

di il
7 risposte

Importare file txt in sql server tramite ODBC

Salve a tutti, vorrei capire qual'è il modo migliore, e più veloce per importare un file txt in un database sql server da remoto.

ho utilizzato Access come front end dove importo il file e poi tramite una SP lo inserisco in una tabella di SQL server ma la soluzione è molto lenta.

vorrei creare una SP che importi i file in sql server da qualsiasi computer utilizzando la connessione ODBC.

ho letto in giro e le opzioni sono bcp, BULK o OPENROWSET.

Qualcuno mi sà indirizzare in qualche esempio per prendere spunto?

Grazie

7 Risposte

  • Re: Importare file txt in sql server tramite ODBC

    eternityck ha scritto:


    vorrei creare una SP che importi i file in sql server da qualsiasi computer utilizzando la connessione ODBC.
    ho letto in giro e le opzioni sono bcp, BULK o OPENROWSET.
    Gli strumenti che hai citato sono quelli corretti, ma la vera domanda da porsi è... come è fatto il file di testo?
  • Re: Importare file txt in sql server tramite ODBC

    È semplicissimo un solo campo, ma é. Molto lungo anche 3.000 righe.
    Vorrei solo importarlo direttamente in una tabella temp in sql server, per analizzarlo ho già creato una sp che fa tutto egregiamente
  • Re: Importare file txt in sql server tramite ODBC

    Ok, allora direi che potresti predisporre qualcosa simile a quanto segue.
    
    SELECT * INTO #Temp
    FROM OPENROWSET(
    	BULK 'PercorsoFile.txt',
    	SINGLE_NCLOB
    ) AS TempData
    
    Se non disponi di un file di formato, ovvero un file che descriva la struttura del file, puoi importarlo con l'istruzione sopra indicando con OPENROWSET di costruire una tabella con un unico campo che contiene tutti i caratteri del file.

    L'indicazione SINGLE_NCLOB sta a indicare che si tratta di un file Unicode; altrimenti puoi usare SINGLE_CLOB per dati con codepage oppure SINGLE_BLOB per caricarli in binario.

    Usando poi STRING_SPLIT puoi suddividere i dati in righe.

    Se i valori del file di testo sono da importare in una tabella, forse potrebbe esserti più utile usare prima il tool bcp per esportare i dati dalla tabella in cui dovrai fare l'inserimento, sfruttando le domande che ti pone il tool in questa fase per fargli generare un file di formato (strutturato come testo FMT o come XML) che faccia da guida per descrivere la struttura dei dati esportati (in questo caso, un singolo campo appartenente al tipo che devi trattare, intero, stringa o altro).
    bcp NomeDatabase.dbo.NomeTabella out PercorsoFileDati.dat -U sa -P password -f PercorsoFileFormato.fmt
    Questo file .fmt che ti viene prodotto in automatico puoi usarlo poi in una istruzione di BULK INSERT per poter importare i dati in modo massivo, avendo però il file di formato a disposizione come riferimento per guidare SQL Server alla corretta interpretazione delle colonne che troverà all'interno del file, e a produrre quindi già la tabella finale.

    Ad esempio,
    
    USE NomeDatabase
    GO
    
    BULK INSERT dbo.NomeTabella
    FROM 'PercorsoFileDati.dat'
    WITH (
    	DATAFILETYPE = 'native',
    	FORMATFILE = 'PercorsoFileFormato.fmt'
    )
    
    oppure
    
    SELECT * INTO #Temp
    FROM OPENROWSET(
      BULK 'PercorsoFileDati.dat',
      FORMATFILE = 'PercorsoFileFormato.fmt'
    ) AS TempData
    
    Dai un'occhiata ai link della documentazione ufficiale per vedere tutte le informazioni salienti sul funzionamento dei comandi e dei tool, e la loro sintassi con i relativi parametri.

    Ciao!
  • Re: Importare file txt in sql server tramite ODBC

    eternityck ha scritto:


    È semplicissimo un solo campo, ma é. Molto lungo anche 3.000 righe.
    P.S.: 3000 righe non sono nulla... con delle BULK INSERT, ho importato in 4-5 secondi dei GB di dati.
    Vai tranquillo che è lo strumento giustissimo!
  • Re: Importare file txt in sql server tramite ODBC

    Grazie Alka, il formato ha l estensione txt
    Ho controllato meglio ed il file ha 460.000 righe,
    Ora faccio un po' di prove e se ho problemi, ti disturbo ancora, cmq sono contento che mi confermi che la strada è quella giusta!
  • Re: Importare file txt in sql server tramite ODBC

    Alka ha scritto:


    ...
    P.S.: 3000 righe non sono nulla... con delle BULK INSERT, ho importato in 4-5 secondi dei GB di dati.
    anche BCP è una scheggia
    ma è una utility di import/export a riga di comando
  • Re: Importare file txt in sql server tramite ODBC

    sspintux ha scritto:


    anche BCP è una scheggia
    Confermo. Del resto, fa sempre operazioni "bulk", anche se a riga di comando invece che via script SQL.
Devi accedere o registrarti per scrivere nel forum
7 risposte