Importazione di dati per operazioni di massa utilizzando BULK INSERT o OPENROWSET(BULK...)
Data aggiornamento: 17 luglio 2006
Questo argomento offre una panoramica dell'utilizzo dell'istruzione Transact-SQL BULK INSERT e dell'istruzione INSERT...SELECT * FROM OPENROWSET(BULK...) per eseguire l'importazione di massa di dati da un file di dati in una tabella di Microsoft SQL Server. L'argomento include inoltre considerazioni sulla protezione per l'utilizzo di BULK INSERT e OPENROWSET(BULK…), nonché sull'utilizzo di questi metodi per l'importazione di massa da un'origine dei dati remota.
[!NOTA] Quando si utilizza BULK INSERT o OPENROWSET(BULK…), è importante comprendere in che modo SQL Server 2005 gestisce la rappresentazione. Per ulteriori informazioni, vedere la sezione "Considerazioni sulla protezione" di seguito in questo argomento.
Istruzione BULK INSERT
L'istruzione BULK INSERT consente di caricare dati da un file di dati a una tabella. Questa funzionalità è analoga a quella dell'opzione in del comando bcp, ma il file di dati viene letto dal processo di SQL Server. Per una descrizione della sintassi di BULK INSERT, vedere BULK INSERT (Transact-SQL).
Esempi
Per esempi relativi a BULK INSERT, vedere:
- BULK INSERT (Transact-SQL)
- Esempi di importazione ed esportazione di massa di documenti XML
- Copia di dati tra regole di confronto diverse
- Mantenimento dei valori Identity durante l'importazione di massa dei dati
- Mantenimento dei valori Null o utilizzo dei valori predefiniti durante un'importazione di massa
- Impostazione dei caratteri di terminazione del campo e della riga
- Utilizzo di un file di formato per l'importazione di massa dei dati
- Importazione ed esportazione di dati in base al formato carattere
- Utilizzo del formato nativo per l'importazione o l'esportazione di dati
- Utilizzo del formato carattere Unicode per l'importazione o l'esportazione di dati
- Utilizzo del formato Unicode nativo per importare o esportare dati
- Utilizzo di un file di formato per ignorare una colonna di una tabella
- Utilizzo di un file di formato per il mapping tra le colonne della tabella e i campi del file di dati
Funzione OPENROWSET(BULK…)
In SQL Server 2005 è stato introdotto il provider di set di righe con lettura di massa OPENROWSET, accessibile chiamando la funzione OPENROWSET e specificando l'opzione BULK. La funzione OPENROWSET(BULK…) consente di accedere ai dati remoti tramite connessione a un'origine dei dati remota, ad esempio un file di dati, mediante un provider OLE DB.
Per eseguire l'importazione di massa dei dati, chiamare OPENROWSET(BULK…) da una clausola SELECT…FROM all'interno di un'istruzione INSERT. La sintassi di base per l'importazione di massa dei dati è la seguente:
INSERT ... SELECT * FROM OPENROWSET(BULK...)
Quando utilizzato in un'istruzione INSERT, OPENROWSET(BULK...) supporta gli hint di tabella. Oltre agli hint di tabella normali, ad esempio TABLOCK, la clausola BULK può accettare gli hint di tabella specializzati seguenti: IGNORE_CONSTRAINTS (ignora solo i vincoli CHECK), IGNORE_TRIGGERS, KEEPDEFAULTS e KEEPIDENTITY. Per ulteriori informazioni, vedere table_hint (Transact-SQL).
Per informazioni sugli utilizzi ulteriori dell'opzione BULK, vedere OPENROWSET (Transact-SQL).
Esempi
Per esempi di istruzioni INSERT...SELECT * FROM OPENROWSET(BULK...), vedere gli argomenti seguenti:
- Esempi di importazione ed esportazione di massa di documenti XML
- Mantenimento dei valori Identity durante l'importazione di massa dei dati
- Mantenimento dei valori Null o utilizzo dei valori predefiniti durante un'importazione di massa
- Utilizzo di un file di formato per l'importazione di massa dei dati
- Importazione ed esportazione di dati in base al formato carattere
- Utilizzo di un file di formato per ignorare una colonna di una tabella
- Utilizzo di un file di formato per escludere un campo di dati
- Utilizzo di un file di formato per il mapping tra le colonne della tabella e i campi del file di dati
Considerazioni sulla protezione
Se un utente utilizza un account di accesso di SQL Server, viene utilizzato il profilo di protezione dell'account del processo di SQL Server.
Al contrario, se un utente di SQL Server esegue l'accesso utilizzando l'autenticazione di Windows, potrà leggere solo i file accessibili dall'account utente, indipendentemente dal profilo di protezione del processo di SQL Server.
Ad esempio, considerare un utente che abbia eseguito l'accesso a un'istanza di SQL Server utilizzando l'autenticazione di Windows. Perché l'utente sia in grado di utilizzare BULK INSERT o OPENROWSET per importare dati da un file di dati in una tabella di SQL Server, è necessario che l'account utente disponga dell'accesso in lettura al file di dati. Con l'accesso al file di dati, l'utente può importare i dati dal file in una tabella anche se il processo di SQL Server non dispone dell'autorizzazione per accedere al file. Non è necessario che l'utente conceda l'autorizzazione di accesso al file al processo di SQL Server.
SQL Server e Microsoft Windows possono essere configurati in modo da attivare un'istanza di SQL Server per connettersi a un'altra istanza di SQL Server trasmettendo le credenziali di un utente di Windows autenticato. Questa configurazione viene definita rappresentazione o delega. La comprensione delle modalità di gestione della protezione da parte di SQL Server 2005 ai fini della rappresentazione dell'utente rappresenta un elemento importante quando si utilizza BULK INSERT o OPENROWSET. La rappresentazione utente fa sì che i file di dati possano trovarsi su un computer diverso rispetto al processo di SQL Server o all'utente. Se, ad esempio, un utente nel Computer_A ha accesso a un file di dati presente nel Computer_B e la delega delle credenziali è stata impostata in modo corretto, l'utente potrà connettersi a un'istanza di SQL Server in esecuzione nel Computer_C, accedere al file di dati nel Computer_B e importare in massa i dati dal file in una tabella nel Computer_C. Per ulteriori informazioni, vedere Panoramica sulla rappresentazione.
[!NOTA] Le modalità di controllo dell'accesso ai file in SQL Server 2005 rispondono a un possibile problema di protezione presente nelle versioni precedenti di Microsoft SQL Server 2000. Nelle versioni precedenti, dopo che l'utente esegue l'autenticazione, l'accesso ai file esterni si basa sul profilo di protezione del processo di SQL Server. Quando il processo di SQL Server accede in lettura a un file, per un utente che non ha accesso al file ma è membro del ruolo predefinito del server bulkadmin, l'utente può importare il file utilizzando BULK INSERT e accedere al contenuto del file.
Importazione di massa da un file di dati remoto
Per utilizzare BULK INSERT o INSERT...SELECT * FROM OPENROWSET(BULK...) per eseguire l'importazione di massa dei dati da un altro computer, è necessario che il file di dati sia condiviso tra i due computer. Per specificare un file di dati condiviso, utilizzare il relativo nome UNC (Universal Naming Convention), la cui forma generica è **\\Nomeserver\Nomecondivisione\Percorso\**Nomefile. È necessario che all'account utente utilizzato da SQL Server siano state concesse le autorizzazioni necessarie per la lettura del file sul disco remoto.
Ad esempio, l'istruzione BULK INSERT
seguente esegue l'importazione di massa dei dati nella tabella SalesOrderDetail
del database AdventureWorks
da un file di dati denominato newdata.txt
. Tale file di dati è memorizzato in una cartella condivisa denominata \dailyorders
e presente in una directory condivisa di rete denominata salesforce
in un sistema denominato computer2
.
BULK INSERT AdventureWorks.Sales.SalesOrderDetail
FROM '\\computer2\salesforce\dailyorders\neworders.txt';
GO
[!NOTA] Questa restrizione non si applica all'utilità bcp in quanto il client legge il file in modo indipendente da SQL Server.
Vedere anche
Concetti
Importazione ed esportazione di dati dati per operazioni di massa
Informazioni sulle operazioni di importazione ed esportazione di massa
Linee guida standard per l'importazione di massa di dati
Altre risorse
INSERT (Transact-SQL)
Panoramica sulla rappresentazione
INSERT (Transact-SQL)
SELECT Clause (Transact-SQL)
OPENROWSET (Transact-SQL)
SELECT (Transact-SQL)
FROM (Transact-SQL)
Utilità bcp
BULK INSERT (Transact-SQL)
Guida in linea e informazioni
Cronologia modifiche
Versione | Cronologia |
---|---|
17 luglio 2006 |
|
5 dicembre 2005 |
|