none
bcp in import RRS feed

  • Domanda

  • Salve, sto usando bpc per esporta/importare dati di una tabella.

    L'importazione è così

     

    bcp NomeDatabase.dbo.Tabella in "C:\bcptest.txt" -S FJ-SERVER\SQLSERVER2008 -U sa -P password -c

    Se l'importazione fallisce in un qualche punto nel mezzo (manca la connessione, chiavi duplicate, problemi di scrittura ecc..) vengono comunque caricante le prime n/2 righe o fallisce tutta l'importazione? A me interesserebbe che non venisse importato nulla per non avere un'importazione a metà.

    Sapete se viene gestito tutto in transazione questa operazione di import? O come posso fare per fare in modo che salti tutta l'importazione per un solo errore?

    Grazie


    lunedì 2 maggio 2011 12:48

Risposte

  • bcp NomeDatabase.dbo.Tabella in "C:\bcptest.txt" -S FJ-SERVER\SQLSERVER2008 -U sa -P password -c

    Se l'importazione fallisce in un qualche punto nel mezzo (manca la connessione, chiavi duplicate, problemi di scrittura ecc..) vengono comunque caricante le prime n/2 righe o fallisce tutta l'importazione? A me interesserebbe che non venisse importato nulla per non avere un'importazione a metà.

    Sapete se viene gestito tutto in transazione questa operazione di import? O come posso fare per fare in modo che salti tutta l'importazione per un solo errore?

    Ciao,

    Di default bcp importa tutti i dati in un unico batch isolato in una transazione, pertanto in caso di errore verrà annullata l'intera transazione (che è proprio il risultato che cerchi).

    Con il parametro -b puoi specificare il numero di righe di un bach superato il quale verrà avviato un nuovo batch in una nuova transazione. In caso di errore verrà annullata solo la transazione corrente.

    Dai BOL:

    -b batch_size

    Specifies the number of rows per batch of imported data. Each batch is imported and logged as a separate transaction that imports the whole batch before being committed. By default, all the rows in the data file are imported as one batch. To distribute the rows among multiple batches, specify a batch_size that is smaller than the number of rows in the data file. If the transaction for any batch fails, only insertions from the current batch are rolled back. Batches already imported by committed transactions are unaffected by a later failure.

    Ciao!


    Lorenzo Benaglia
    Microsoft MVP - SQL Server
    http://blogs.dotnethell.it/lorenzo
    http://social.technet.microsoft.com/Forums/it-IT/sqlserverit
    • Contrassegnato come risposta ugaciaka lunedì 2 maggio 2011 13:58
    lunedì 2 maggio 2011 13:10
    Moderatore

Tutte le risposte

  • bcp NomeDatabase.dbo.Tabella in "C:\bcptest.txt" -S FJ-SERVER\SQLSERVER2008 -U sa -P password -c

    Se l'importazione fallisce in un qualche punto nel mezzo (manca la connessione, chiavi duplicate, problemi di scrittura ecc..) vengono comunque caricante le prime n/2 righe o fallisce tutta l'importazione? A me interesserebbe che non venisse importato nulla per non avere un'importazione a metà.

    Sapete se viene gestito tutto in transazione questa operazione di import? O come posso fare per fare in modo che salti tutta l'importazione per un solo errore?

    Ciao,

    Di default bcp importa tutti i dati in un unico batch isolato in una transazione, pertanto in caso di errore verrà annullata l'intera transazione (che è proprio il risultato che cerchi).

    Con il parametro -b puoi specificare il numero di righe di un bach superato il quale verrà avviato un nuovo batch in una nuova transazione. In caso di errore verrà annullata solo la transazione corrente.

    Dai BOL:

    -b batch_size

    Specifies the number of rows per batch of imported data. Each batch is imported and logged as a separate transaction that imports the whole batch before being committed. By default, all the rows in the data file are imported as one batch. To distribute the rows among multiple batches, specify a batch_size that is smaller than the number of rows in the data file. If the transaction for any batch fails, only insertions from the current batch are rolled back. Batches already imported by committed transactions are unaffected by a later failure.

    Ciao!


    Lorenzo Benaglia
    Microsoft MVP - SQL Server
    http://blogs.dotnethell.it/lorenzo
    http://social.technet.microsoft.com/Forums/it-IT/sqlserverit
    • Contrassegnato come risposta ugaciaka lunedì 2 maggio 2011 13:58
    lunedì 2 maggio 2011 13:10
    Moderatore
  • Perfetto! Grazie mille!
    lunedì 2 maggio 2011 13:58