Logo principale
Il vantaggio dell'intelligenza consiste talvolta nel fingersi stupidi. E' fare il contrario che è molto più difficile. (Berthold Auerbach)
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 2056 volte e votato 16 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!