Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it L'avatar di nat99
    Registrato dal
    Dec 2001
    Messaggi
    763

    [SQL SERVER] Inserimento massivo

    Salve, ho diversi file da importare in un db, parliamo di milioni di record.

    I valori stringa sono cosi impostati nel file CSV:
    ="VALORE
    CONTINUO STRINGA"
    ="ALTRO VALORE"
    insomma: cominciano con =" e terminano con "J
    I valori numerici non hanno caratteri di inizio/fine.

    I campi sono separati da ;

    Ho letto che dovrei usare i file di formato FMT, sinceramente ho provato ma non ci sono riuscito.

    Sapreste darmi una mano?

  2. #2
    non ho capito come è fatto il file, anche perché se è davvero un CSV si importa senza alcun problema. posta un estratto del file

  3. #3
    Utente di HTML.it L'avatar di nat99
    Registrato dal
    Dec 2001
    Messaggi
    763
    sono diversi file ecco perché non l'ho postato, ne metto uno riepilogativo

    ARTICOLO_ID;INFO_ID;INFO_AGGIUNTIVA
    4465387;8040;"Opzione[=>]Valore"
    4465387;8042;"Opzione[=>]Valore"
    4465387;1651;"Opzione 1[=>]Valore 1
    Opzione 2[=>]Valore2"
    Bene o male questa è la struttura

  4. #4
    sarà un bel rompicapo caricarlo così, visto che le righe non sono uguali. riesci a caricarlo in excel e sistemarlo?

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    523
    se csv è uguale alla struttura della tabella
    puoi usare la "bulk insert" direttamente
    codice:
    BULK INSERT CSVTest FROM 'c:\csvtest.txt' WITH
    (
    FIELDTERMINATOR = ',',
    ROWTERMINATOR = '\n'
    )
    GO
    altrimenti puoi creare una view che faccia da tramite tra la struttura del csv e quella della tabella
    codice:
    CREATE VIEW YourViewName
     AS
     SELECT Field1, Field2, Field3
     FROM PriorTableThatExists
     GO
    BULK INSERT YourViewName
     FROM ‘C:\YourFilePath’
    WITH ( FIELDTERMINATOR = ‘,’,
    ROWTERMINATOR = ‘\n’
    )
    GO
    lo user per la connessione è meglio sia tipo amministratore per avere le autorizzazioni alle "bulk insert"

  6. #6
    Utente di HTML.it L'avatar di nat99
    Registrato dal
    Dec 2001
    Messaggi
    763
    Grazie marino51,
    il problema è che la terminazione '\n' non sempre è verificata

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    523
    per separare le righe credo esistano 2 condizioni 0x0A oppure lo stesso carattere seguito da 0x0D
    potresti provare anche con "\r" altrimenti,

    se puoi importare in Excel diventa facile creare una macro per inserire da Excel a db direttamente (se vuoi ti posto una via ... )

  8. #8
    Utente di HTML.it L'avatar di nat99
    Registrato dal
    Dec 2001
    Messaggi
    763
    Magari, grazie mille

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    523
    Come prima cosa devi creare una connessione al db e provarla per essere sicuro che funzioni (tranquillo è semplice)
    con un file UDL (Universal Data Link) crei la connessione al database
    ovvero, crei un file .txt vuoto (tasto dx mouse, nuovo, documento di testo)
    lo rinomini con il nome che vuoi ma con estensione ".udl"
    poi con tasto dx del mouse scegli "proprietà", ti si apre la scelta dei parametri di connessione al db
    come provider puoi scegliere x MS SQL,
    NativeClient (se lo hai installato ma non scegliere vers 11) oppure,
    OLEDB for SQLserver oppure,
    OLEDB for ODBC o, da ultimo,
    OLEDB for ODBC with Connection String
    quindi inserisci i parametri del db (compresa la password dell'utente che usi) e soprattutto verifichi la connessione con l'apposito tasto
    se funziona, sei a metà dell'opera

    fammi sapere se ok o ti serve qualche info aggiuntiva
    Ultima modifica di marino51; 26-01-2015 a 13:55

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    523
    poi ti riporto la macro che ho usato per un test, inserendo 4 record in un db,
    puoi vedere come viene usato il file UDL che ti ho fatto creare
    codice:
    Sub Macro1()
    Set tdb = CreateObject("ADODB.Connection")
    tdb.connectionstring = "file name=E:\TEMP\TestDB_NativeClient.UDL;"
    tdb.Open
    sqlcmd = "INSERT INTO rooms ( idhotel, room, status)" & _
        "SELECT 9, 1, 'OK'" & _
        "UNION ALL SELECT 9, 2, 'OK'" & _
        "UNION ALL SELECT 9, 3, 'NO'" & _
        "UNION ALL SELECT 9, 4, 'OK'"
    tdb.Execute (sqlcmd)
    tdb.Close
    End Sub
    certo, dovremo complicare un poco la macro per leggere tutte le righe da inserire (ma non molto)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.