Importazione di dati per operazioni bulk utilizzando BULK INSERT o OPENROWSET(BULK...) (SQL Server)

In questo argomento viene fornita una panoramica sull'utilizzo dell'istruzione Transact-SQL BULK INSERT e dell'istruzione INSERT...SELECT * FROM OPENROWSET(BULK...) per effettuare l'importazione bulk di dati da un file di dati in una tabella di SQL Server. L'argomento include inoltre considerazioni sulla sicurezza per l'utilizzo di BULK INSERT e OPENROWSET(BULK…), nonché sull'utilizzo di questi metodi per l'importazione bulk da un'origine dei dati remota.

[!NOTA]

Quando si utilizza BULK INSERT o OPENROWSET(BULK…), è importante comprendere in che modo la versione di SQL Server gestisce la rappresentazione. Per ulteriori informazioni, vedere la sezione "Considerazioni sulla sicurezza" 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:

Funzione OPENROWSET(BULK…)

Al provider bulk per set di righe OPENROWSET si accede 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 bulk dei dati, chiamare OPENROWSET(BULK…) da una clausola SELECT…FROM all'interno di un'istruzione INSERT. La sintassi di base per l'importazione bulk 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 Hint di tabella (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:

Considerazioni sulla sicurezza

Se un utente utilizza un account di accesso di SQL Server, viene utilizzato il profilo di sicurezza dell'account del processo di SQL Server. Un account di accesso basato sull'autenticazione di SQL Server non può essere autenticato all'esterno del motore di database. Pertanto, quando un comando BULK INSERT viene avviato da un account di accesso che utilizza l'autenticazione di SQL, la connessione ai dati viene effettuata utilizzando il contesto di sicurezza dell'account del processo di SQL Server (l'account utilizzato dal servizio Motore di database di SQL Server). Per una lettura corretta dei dati di origine è necessario concedere all'account utilizzato dal motore di database di SQL Server l'accesso ai dati di origine. Al contrario, un utente di SQL Server che esegue l'accesso utilizzando l'autenticazione di Windows potrà leggere solo i file a cui l'account utente può accedere, indipendentemente dal profilo di sicurezza del processo 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 abilitare 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 è nota come rappresentazione o delega. La comprensione delle modalità di gestione della sicurezza da parte della versione di SQL Server 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 ed effettuare un'importazione bulk dei dati dal file in una tabella nel Computer_C.

Importazione bulk da un file di dati remoto

Per utilizzare BULK INSERT o INSERT...SELECT * FROM OPENROWSET(BULK...) per effettuare l'importazione bulk 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), il cui formato generico è **\\Servername\Sharename\Path\**Filename. Inoltre, è necessario che all'account utilizzato per l'accesso al file di dati siano state concesse le autorizzazioni richieste per la lettura del file sul disco remoto.

Ad esempio, l'istruzione BULK INSERT seguente esegue l'importazione bulk 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 AdventureWorks2012.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

Riferimento

INSERT (Transact-SQL)

SELECT Clause (Transact-SQL)

OPENROWSET (Transact-SQL)

SELECT (Transact-SQL)

FROM (Transact-SQL)

Utilità bcp

BULK INSERT (Transact-SQL)

Concetti

Informazioni sull'importazione ed esportazione bulk di dati (SQL Server)