none
Sql store procedura - File di testo da caricare in tabella RRS feed

  • Domanda

  • Buongiorno a tutti,

    ho la necessità di importare quotidianamente dei file di testo in tabelle di Sql .La versione è una express 2012

    Quali sono le soluzioni percorribili ?Secondo voi creare delle procedure poi richiamabili da un visual basic schedulato ogni mattina ?

    Tutto direttamente da Sql ma poi è possibile schedulare ?

    Ci sono dei link da seguire su come fare ?

    grazie mille a tutti

    giovedì 14 marzo 2019 09:56

Risposte

  • L'articolo su stackoverflow che ti ho indicato, fa esattamente quello che devi fare tu quindi proverei a guardare quello.

    Sabrina C. - http://www.dotnetwork.it

    venerdì 15 marzo 2019 11:26
  • Puoi fare una

    convert(decimal(18,2),Campo6)

    Ma verifica che la virgola sia corretta se c'è in base alla locale del tuo sql server.

    saluti

    Sabrina


    Sabrina C. - http://www.dotnetwork.it

    • Contrassegnato come risposta IL CREM lunedì 15 aprile 2019 09:07
    martedì 2 aprile 2019 13:00

Tutte le risposte

  • Se è un file di testo, potresti memorizzare solo il suo contenuto in un campo testo e il nome file in un altro campo in modo tale da poterlo riprodurre se ti serve,

    per farlo crei una tabella con 3 campi: un ID int auto numerato (Identity=si) e lo poni come PrimaryKey

    NomeFile nvarchar(255) dove salvi il nome file

    ContenutoFile nvarchar(max) dove scrivi il contenuto del file.

    Per il come farlo da sql server qui trovi un esempio:

    https://stackoverflow.com/questions/12502213/how-to-read-a-text-file-using-t-sql

    Per la schedulazione NO, sqlexpress non ha il SqlAgent per schedulare gli script.

    Se volessi programmare un po', per la schedulazione potresti adattare il progetto MiniSqlAgent che trovi a questo link

    http://www.sabrinacosolo.com/minisqlagent-implementare-un-servizio-per-eseguire-job-schedulati-su-sqlserver/

    saluti


    Sabrina C. - http://www.dotnetwork.it

    giovedì 14 marzo 2019 11:33
  • Buona sera , bisognerebbe sapere come è fatto il tuo file di testo , cos'hai da importare , se i dati vanno in tabelle diverse , o se si accodano nelle stesse tabelle etc

    Saluti



    QuirinoS

    giovedì 14 marzo 2019 12:36
  • Buongiorno e grazie delle risposte ,

    è un file txt (o csv) che arriva da un gestionale, composta da circa 20 colonne , alcuni testo ma anche valori come importo e qtà.

    Volevo capire le soluzioni alternative a quella che ho in mente , ovvero programma Vb che legge il file di testo record per record e scrive nella tabella (unica in questo caso) di Sql . Questa cosa la dovrei fare tutte le notti e potrebbe durare molto questo leggi/scrivi.

    grazie

    venerdì 15 marzo 2019 10:53
  • L'articolo su stackoverflow che ti ho indicato, fa esattamente quello che devi fare tu quindi proverei a guardare quello.

    Sabrina C. - http://www.dotnetwork.it

    venerdì 15 marzo 2019 11:26
  • Se tu avessi una versione standard o superiore sarebbe più veloce , ma avendo la express devi fare qualche passaggio in più

    1 ) ti porti i dati nella tabella magari una tabella di appoggio

    bulk insert [latuatabella] from 'C:\filedainportare.csv'
    with (fieldterminator = ',', rowterminator = '\n')

    go

    2 ) devi trovare il modo di schedularlo e non avedo l'agent , devi usare lo schedulatore di windows .

    Quindi dovresti usare o sqlcmd o power shell per fare questo con lo schedulatore di windows.

    Saluti


    QuirinoS

    venerdì 15 marzo 2019 13:47
  • Grazie a tutti,

    ho creato :

    USE Test_csv
    CREATE TABLE #TEXTFILE_1(
        FIELD1 varchar(100),
        FIELD2 varchar(100),
        FIELD3 varchar(100),
        FIELD4 varchar(100),
        FIELD5 varchar(100),
        FIELD6 decimal(18,2));
            

    BULK INSERT #TEXTFILE_1 FROM 'C:\Cantiere\Test_sql\ordini_sql.txt'
    WITH (FIELDTERMINATOR ='\t',ROWTERMINATOR ='\n')

    /*You now have your bulk data*/

    delete from dbo.Test_sql

        insert into dbo.Test_sql (campo1, campo2, campo3, campo4, campo5, campo6)
            select FIELD1, FIELD2, FIELD3, FIELD4, FIELD5, FIELD6  
            FROM #TEXTFILE_1 txt;

    drop table #TEXTFILE_1

    e funziona , o meglio funzionava , poi ho cambiato il campo 6 della tabella in decimal 18,2 questo perchè il campo del txt che deve finire nel campo6 è un importo così valorizzato :
    7082,4

    immagino che il problema stia nella virgola . Come risolverlo secondo voi ?

    grazie di nuovo

    venerdì 29 marzo 2019 17:04
  • Puoi fare una

    convert(decimal(18,2),Campo6)

    Ma verifica che la virgola sia corretta se c'è in base alla locale del tuo sql server.

    saluti

    Sabrina


    Sabrina C. - http://www.dotnetwork.it

    • Contrassegnato come risposta IL CREM lunedì 15 aprile 2019 09:07
    martedì 2 aprile 2019 13:00
  • Funziona . Grazie mille
    lunedì 15 aprile 2019 09:07