Importazione di dati per operazioni bulk con BULK INSERT o OPENROWSET(BULK...) (SQL Server)Import Bulk Data by Using BULK INSERT or OPENROWSET(BULK...) (SQL Server)

QUESTO ARGOMENTO SI APPLICA A:sìSQL Server (a partire dalla versione 2008)sìDatabase SQL di AzurenoAzure SQL Data Warehouse noParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

In questo argomento viene fornita una panoramica sull'utilizzo dell'istruzione Transact-SQLTransact-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 ServerSQL Server .This topic provides an overview of how to use the Transact-SQLTransact-SQL BULK INSERT statement and the INSERT...SELECT * FROM OPENROWSET(BULK...) statement to bulk import data from a data file into a SQL ServerSQL Server table. 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.This topic also describes security considerations for using BULK INSERT and OPENROWSET(BULK…), and using these methods to bulk import from a remote data source.

Nota

Quando si utilizza BULK INSERT o OPENROWSET(BULK…), è importante comprendere in che modo la versione di SQL ServerSQL Server gestisce la rappresentazione.When you use BULK INSERT or OPENROWSET(BULK…), it is important to understand how SQL ServerSQL Server version handles impersonation. Per ulteriori informazioni, vedere la sezione "Considerazioni sulla sicurezza" di seguito in questo argomento.For more information, see "Security Considerations," later in this topic.

BULK INSERT - istruzioneBULK INSERT statement

L'istruzione BULK INSERT consente di caricare dati da un file di dati a una tabella.BULK INSERT loads data from a data file into a table. Questa funzionalità è analoga a quella dell'opzione in del comando bcp , ma il file di dati viene letto dal processo di SQL ServerSQL Server .This functionality is similar to that provided by the in option of the bcp command; however, the data file is read by the SQL ServerSQL Server process. Per una descrizione della sintassi di BULK INSERT, vedere BULK INSERT (Transact-SQL).For a description of the BULK INSERT syntax, see BULK INSERT (Transact-SQL).

Esempi di BULK INSERTBULK INSERT examples

Funzione OPENROWSET(BULK…)OPENROWSET(BULK…) Function

Al provider bulk per set di righe OPENROWSET si accede chiamando la funzione OPENROWSET e specificando l'opzione BULK.The OPENROWSET bulk rowset provider is accessed by calling the OPENROWSET function and specifying the BULK option. 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.The OPENROWSET(BULK…) function allows you to access remote data by connecting to a remote data source, such as a data file, through an OLE DB provider.

Si applica a: OPENROWSET non è disponibile in Database SQLSQL Database.Applies to: OPENROWSET is not available in Database SQLSQL Database.

Per eseguire l'importazione bulk dei dati, chiamare OPENROWSET(BULK…) da una clausola SELECT…FROM all'interno di un'istruzione INSERT.To bulk import data, call OPENROWSET(BULK…) from a SELECT…FROM clause within an INSERT statement. La sintassi di base per l'importazione bulk dei dati è la seguente:The basic syntax for bulk importing data is:

INSERT ... SELECT * FROM OPENROWSET(BULK...).INSERT ... SELECT * FROM OPENROWSET(BULK...)

Quando utilizzato in un'istruzione INSERT, OPENROWSET(BULK...) supporta gli hint di tabella.When used in an INSERT statement, OPENROWSET(BULK...) supports table hints. 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.In addition to the regular table hints, such as TABLOCK, the BULK clause can accept the following specialized table hints: IGNORE_CONSTRAINTS (ignores only the CHECK constraints), IGNORE_TRIGGERS, KEEPDEFAULTS, and KEEPIDENTITY. Per altre informazioni, vedere Hint di tabella (Transact-SQL).For more information, see Table Hints (Transact-SQL).

Per informazioni sugli usi aggiuntivi dell'opzione BULK, vedere OPENROWSET (Transact-SQL).For information about additional uses of the BULK option, see OPENROWSET (Transact-SQL).

Esempi di istruzioni INSERT...SELECT * FROM OPENROWSET(BULK...):INSERT...SELECT * FROM OPENROWSET(BULK...) statements - examples:

Considerazioni sulla sicurezzaSecurity considerations

Se un utente utilizza un account di accesso di SQL ServerSQL Server , viene utilizzato il profilo di sicurezza dell'account del processo di SQL ServerSQL Server .If a user uses a SQL ServerSQL Server login, the security profile of the SQL ServerSQL Server process account is used. Un account di accesso basato sull'autenticazione di SQL Server non può essere autenticato all'esterno del motore di database.A login using SQL Server authentication cannot be authenticated outside of the Database Engine. 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).Therefore, when a BULK INSERT command is initiated by a login using SQL Server authentication, the connection to the data is made using the security context of the SQL Server process account (the account used by the SQL Server Database Engine service).

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.To successfully read the source data you must grant the account used by the SQL Server Database Engine, access to the source data. Al contrario, se un utente di SQL ServerSQL Server esegue l'accesso utilizzando l'autenticazione di Windows, potrà leggere solo i file accessibili dall'account utente, indipendentemente dal profilo di sicurezza del processo di SQL ServerSQL Server .In contrast, if a SQL ServerSQL Server user logs on by using Windows Authentication, the user can read only those files that can be accessed by the user account, regardless of the security profile of the SQL ServerSQL Server process.

Ad esempio, considerare un utente che abbia eseguito l'accesso a un'istanza di SQL ServerSQL Server utilizzando l'autenticazione di Windows.For example, consider a user who logged in to an instance of SQL ServerSQL Server by using Windows Authentication. 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 ServerSQL Server , è necessario che l'account utente disponga dell'accesso in lettura al file di dati.For the user to be able to use BULK INSERT or OPENROWSET to import data from a data file into a SQL ServerSQL Server table, the user account requires read access to the data file. Con l'accesso al file di dati, l'utente può importare i dati dal file in una tabella anche se il processo di SQL ServerSQL Server non dispone dell'autorizzazione per accedere al file.With access to the data file, the user can import data from the file into a table even if the SQL ServerSQL Server process does not have permission to access the file. Non è necessario che l'utente conceda l'autorizzazione di accesso al file al processo di SQL ServerSQL Server .The user does not have to grant file-access permission to the SQL ServerSQL Server process.

SQL ServerSQL Server e MicrosoftMicrosoft Windows possono essere configurati in modo da abilitare un'istanza di SQL ServerSQL Server per connettersi a un'altra istanza di SQL ServerSQL Server trasmettendo le credenziali di un utente di Windows autenticato. and MicrosoftMicrosoft Windows can be configured to enable an instance of SQL ServerSQL Server to connect to another instance of SQL ServerSQL Server by forwarding the credentials of an authenticated Windows user. Questa configurazione è nota come rappresentazione o delega.This arrangement is known as impersonation or delegation. La comprensione delle modalità di gestione della sicurezza da parte della versione di SQL ServerSQL Server ai fini della rappresentazione dell'utente rappresenta un elemento importante quando si usa BULK INSERT o OPENROWSET.Understanding how SQL ServerSQL Server version handle security for user impersonation is important when you use BULK INSERT or OPENROWSET. La rappresentazione utente fa sì che i file di dati possano trovarsi su un computer diverso rispetto al processo di SQL ServerSQL Server o all'utente.User impersonation allows the data file to reside on a different computer than either the SQL ServerSQL Server process or the user. Se, ad esempio, un utente nel Computer_A ha accesso a un file di dati presente nel Computer_Be la delega delle credenziali è stata impostata in modo corretto, l'utente potrà connettersi a un'istanza di SQL ServerSQL Server in esecuzione nel Computer_C, accedere al file di dati nel Computer_Bed effettuare un'importazione in blocco dei dati dal file in una tabella nel Computer_C.For example, if a user on Computer_A has access to a data file on Computer_B, and the delegation of credentials has been set appropriately, the user can connect to an instance of SQL ServerSQL Server that is running on Computer_C, access the data file on Computer_B, and bulk import data from that file into a table on Computer_C.

Importazione bulk da un file di dati remotoBulk importing from a remote data file

Per usare BULK INSERT o INSERT...SELECT * FROM OPENROWSET(BULK...) per effettuare l'importazione in blocco dei dati da un altro computer, è necessario che il file di dati sia condiviso tra i due computer.To use BULK INSERT or INSERT...SELECT * FROM OPENROWSET(BULK...) to bulk import data from another computer, the data file must be shared between the two computers. Per specificare un file di dati condiviso, usare il relativo nome UNC (Universal Naming Convention), il cui formato generico è \\Nomeserver\Nomecondivisione\Percorso\Nomefile.To specify a shared data file, use its universal naming convention (UNC) name, which takes the general form, \\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.Additionally, the account used to access the data file must have the permissions that are required for reading the file on the remote disk.

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.For example, the following BULK INSERT statement bulk imports data into the SalesOrderDetail table of the AdventureWorks database from a data file that is named 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.This data file resides in a shared folder named \dailyorders on a network share directory named salesforce on a system named computer2.

BULK INSERT AdventureWorks2012.Sales.SalesOrderDetail  
   FROM '\\computer2\salesforce\dailyorders\neworders.txt';  
GO  

Nota

Questa restrizione non si applica all'utilità bcp perché il client legge il file in modo indipendente da SQL ServerSQL Server.This restriction does not apply to the bcp utility because the client reads the file independently of SQL ServerSQL Server.

Vedere ancheSee also

INSERT (Transact-SQL) INSERT (Transact-SQL)
Clausola SELECT (Transact-SQL) SELECT Clause (Transact-SQL)
Informazioni sull'importazione ed esportazione bulk di dati (SQL Server) Bulk Import and Export of Data (SQL Server)
OPENROWSET (Transact-SQL) OPENROWSET (Transact-SQL)
SELECT (Transact-SQL) SELECT (Transact-SQL)
FROM (Transact-SQL) FROM (Transact-SQL)
Utilità bcp bcp Utility
BULK INSERT (Transact-SQL)BULK INSERT (Transact-SQL)