Logo principale
Una scelta conduce ad una nuova serie di circostanze possibili. Con mente lucida, puoi fare qualsiasi cosa. (Dalai Lama)
Torna alla pagina iniziale Aggiungi ai Preferiti Area Riservata Contatto
::: Testo | A- | A+ | A0 :::
   Pagina iniziale // SQL Server // Importazione di grandi file di testo
::: Cambia visualizzazione ::: who am i? :::   

Importazione di grandi file di testo

Nel caso in cui le informazioni da importare fossero in formato testo delimitato e/o fisso abbiamo almeno due possibilità: importare le informazioni utilizzando i potentissimi Data Transformation Service oppure utilizzare le funzionalità di bulk import disponibili "nativamente" con il motore di Sql Server. Delle due, la prima possibilità è particolarmente apprezzabile per la enorme facilità d’utilizzo. Mentre, la seconda, che è quella che prenderemo in considerazione per questo articolo trova il suo punto di forza nella impareggiabile potenza e velocità di elaborazione. Infatti grazie al fatto che le operazioni di bulk import vengono eseguite direttamente all’interno dello stesso processo di Sql Server il file contenente le informazioni di importazione è acceduto direttamente dal motore senza inutili e costosi switch tra processi esterni tra di loro o altri rallentamenti di alcun genere. La sintassi è la seguente:

BULK INSERT [ [ 'database_name'.] [ 'owner' ].] { 'table_name' FROM 'data_file'} 
 [ WITH 
 ( 
 [ BATCHSIZE [ = batch_size ] ] 
 [ [ , ] CHECK_CONSTRAINTS ] 
 [ [ , ] CODEPAGE [ = 'ACP' | 'OEM' | 'RAW' | 'code_page' ] ] 
 [ [ , ] DATAFILETYPE [ = 
 { 'char' | 'native'| 'widechar' | 'widenative' } ] ] 
 [ [ , ] FIELDTERMINATOR [ = 'field_terminator' ] ] 
 [ [ , ] FIRSTROW [ = first_row ] ] 
 [ [ , ] FIRE_TRIGGERS ] 
 [ [ , ] FORMATFILE = 'format_file_path' ] 
 [ [ , ] KEEPIDENTITY ] 
 [ [ , ] KEEPNULLS ] 
 [ [ , ] KILOBYTES_PER_BATCH [ = kilobytes_per_batch ] ] 
 [ [ , ] LASTROW [ = last_row ] ] 
 [ [ , ] MAXERRORS [ = max_errors ] ] 
 [ [ , ] ORDER ( { column [ ASC | DESC ] } [ ,...n ] ) ] 
 [ [ , ] ROWS_PER_BATCH [ = rows_per_batch ] ] 
 [ [ , ] ROWTERMINATOR [ = 'row_terminator' ] ] 
 [ [ , ] TABLOCK ] 
 )
 ]

Ovviamente istruzioni di questo tipo possono essere eseguite anche all’interno di transazioni. In questo caso un eventuale roll-back causerebbe la revoca di tutti i batch inviati al motore relazionale. Ecco due esempi presi dalla documentazione ufficiale:

BULK INSERT Northwind.dbo.[Order Details]
   FROM 'f:\orders\lineitem.tbl'
   WITH 
   (
   FIELDTERMINATOR = '|',
   ROWTERMINATOR = '|\n'
   )

Il seguente esempio indica esplicitamente l’invocazione di eventuali trigger associate alle tabelle in cui si stanno importando le informazioni per validare od "accomodare" i dati in tempo reale direttamente durante la stessa fase di inserimento:

   BULK INSERT Northwind.dbo.[Order Details]
   FROM 'f:\orders\lineitem.tbl'
   WITH
   (
   FIELDTERMINATOR = '|',
   ROWTERMINATOR = ':\n',
   FIRE_TRIGGERS
   )

Articolo visitato 5393 volte e votato 21 volte (media: 4.0000 su 5)

Voto:
Un commento:
(facoltativo)
::: Pagina iniziale ::: Torna all'inizio della pagina ::: Stampa la pagina ::: 
Valid HTML 4.01 Transitional Valid CSS!