Importación en bloque de datos mediante las instrucciones BULK INSERT o OPENROWSET(BULK...) (SQL Server)Import Bulk Data by Using BULK INSERT or OPENROWSET(BULK...) (SQL Server)

ESTE TEMA SE APLICA A:síSQL Server (a partir de 2008)síAzure SQL DatabasenoAzure SQL Data Warehouse noAlmacenamiento de datos paralelos THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

En este tema se ofrece información general acerca de cómo usar las instrucciones Transact-SQLTransact-SQL BULK INSERT e INSERT...SELECT * FROM OPENROWSET(BULK...) para realizar una importación masiva de datos desde un archivo de datos a una tabla de 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. También se describen las consideraciones relativas a la seguridad del uso de BULK INSERT y OPENROWSET(BULK…), así como el uso de estos métodos para una importación masiva desde un origen de datos remoto.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 Cuando use BULK INSERT o OPENROWSET(BULK…), es importante comprender el modo en que la versión de SQL ServerSQL Server trata la suplantación.NOTE When you use BULK INSERT or OPENROWSET(BULK…), it is important to understand how SQL ServerSQL Server version handles impersonation. Para obtener más información, vea la sección "Consideraciones relativas a la seguridad" más adelante en este tema.For more information, see "Security Considerations," later in this topic.

BULK INSERT, instrucciónBULK INSERT statement

BULK INSERT carga datos de un archivo de datos a una tabla.BULK INSERT loads data from a data file into a table. Esta funcionalidad es parecida a la que ofrece la opción in del comando bcp , aunque el que lee el archivo de datos es el proceso de 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. Para obtener una descripción de la sintaxis de BULK INSERT, vea BULK INSERT (Transact-SQL).For a description of the BULK INSERT syntax, see BULK INSERT (Transact-SQL).

Ejemplos de BULK INSERTBULK INSERT examples

Función OPENROWSET(BULK…)OPENROWSET(BULK…) Function

Se tiene acceso al proveedor de conjuntos de filas BULK de OPENROWSET al llamar a la función OPENROWSET y especificar la opción BULK.The OPENROWSET bulk rowset provider is accessed by calling the OPENROWSET function and specifying the BULK option. La función OPENROWSET(BULK…) permite obtener acceso a datos remotos mediante la conexión a un origen de datos remoto como, por ejemplo, un archivo de datos, a través de un proveedor 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.

Se aplica a: OPENROWSET no está disponible en Base de datos SQLSQL Database.Applies to: OPENROWSET is not available in Base de datos SQLSQL Database.

Para realizar una importación masiva de datos, llame a OPENROWSET(BULK…) desde una cláusula SELECT…FROM en una instrucción INSERT.To bulk import data, call OPENROWSET(BULK…) from a SELECT…FROM clause within an INSERT statement. La sintaxis básica de una importación masiva de datos es:The basic syntax for bulk importing data is:

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

Cuando se usa en una instrucción INSERT, OPENROWSET(BULK...) admite sugerencias de tabla.When used in an INSERT statement, OPENROWSET(BULK...) supports table hints. Además de las sugerencias de tabla normales, como TABLOCK, la cláusula BULK puede aceptar las sugerencias de tablas especializadas siguientes: IGNORE_CONSTRAINTS (solo pasa por alto las restricciones CHECK), IGNORE_TRIGGERS, KEEPDEFAULTS y 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. Para obtener más información, vea Sugerencias de tabla (Transact-SQL).For more information, see Table Hints (Transact-SQL).

Para obtener información sobre los usos adicionales de la opción BULK, vea OPENROWSET (Transact-SQL).For information about additional uses of the BULK option, see OPENROWSET (Transact-SQL).

Instrucciones INSERT...SELECT * FROM OPENROWSET(BULK...), ejemplos:INSERT...SELECT * FROM OPENROWSET(BULK...) statements - examples:

Consideraciones relativas a la seguridadSecurity considerations

Si un usuario utiliza un inicio de sesión de SQL ServerSQL Server , se utilizará el perfil de seguridad de la cuenta de proceso de 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 inicio de sesión que use autenticación de SQL Server no se puede autenticar fuera del Motor de base de datos.A login using SQL Server authentication cannot be authenticated outside of the Database Engine. Por tanto, cuando un inicio de sesión que usa autenticación de SQL Server inicia un comando BULK INSERT, la conexión con los datos se realiza usando el contexto de seguridad de la cuenta de proceso de SQL Server (la cuenta usada por el servicio Motor de base de datos de 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).

Para leer correctamente los datos de origen, debe conceder acceso a los datos de origen a la cuenta usada por el Motor de base de datos de SQL Server.To successfully read the source data you must grant the account used by the SQL Server Database Engine, access to the source data. Por el contrario, si un usuario de SQL ServerSQL Server ha iniciado sesión mediante autenticación de Windows, el usuario solo puede leer los archivos a los que la cuenta de usuario tiene acceso, independientemente del perfil de seguridad del proceso de 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.

Por ejemplo, imagine un usuario que ha iniciado sesión en una instancia de SQL ServerSQL Server mediante autenticación de Windows.For example, consider a user who logged in to an instance of SQL ServerSQL Server by using Windows Authentication. Para que el usuario pueda utilizar BULK INSERT u OPENROWSET para importar datos de un archivo de datos a una tabla de SQL ServerSQL Server , la cuenta de usuario necesita acceso de lectura para el archivo de datos.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. Como el usuario dispone de acceso al archivo de datos, podrá importar datos del archivo a la tabla, aunque el proceso de SQL ServerSQL Server no tenga permiso de acceso al archivo.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. El usuario no tiene que conceder permiso de acceso a archivos al proceso de SQL ServerSQL Server .The user does not have to grant file-access permission to the SQL ServerSQL Server process.

SQL ServerSQL Server y MicrosoftMicrosoft Windows para permitir que una instancia de SQL ServerSQL Server se conecte a otra instancia de SQL ServerSQL Server mediante el reenvío de las credenciales de un usuario de Windows autenticado. by forwarding the credentials of an authenticated Windows user. Esto se conoce como suplantación o delegación.This arrangement is known as impersonation or delegation. Es importante entender cómo la versión de SQL ServerSQL Server trata la seguridad en la suplantación de usuarios al utilizar BULK INSERT u OPENROWSET.Understanding how SQL ServerSQL Server version handle security for user impersonation is important when you use BULK INSERT or OPENROWSET. La suplantación de usuarios permite que el archivo de datos resida en un equipo diferente al del proceso de SQL ServerSQL Server o del usuario.User impersonation allows the data file to reside on a different computer than either the SQL ServerSQL Server process or the user. Por ejemplo, si un usuario del Equipo_A tiene acceso a un archivo de datos del Equipo_By la delegación de credenciales se ha establecido correctamente, el usuario puede conectarse a una instancia de SQL ServerSQL Server que se esté ejecutando en el Equipo_C, tener acceso al archivo de datos del Equipo_By realizar una importación en bloque de datos desde ese archivo a una tabla en el Equipo_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.

Importación masiva desde un archivo de datos remotoBulk importing from a remote data file

Para usar BULK INSERT o INSERT...SELECT * FROM OPENROWSET(BULK...) para la importación en bloque de datos desde otro equipo, el archivo de datos debe estar compartido entre los dos equipos.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. Para especificar un archivo de datos compartido, use la convención de nomenclatura universal (UNC) para el nombre, que tiene la forma general de \\nombreDeServidor\nombreDeRecursoCompartido\rutaDeAcceso\nombreDeArchivo.To specify a shared data file, use its universal naming convention (UNC) name, which takes the general form, \\Servername\Sharename\Path\Filename. Además, la cuenta usada para obtener acceso al archivo de datos debe tener los permisos necesarios para leer el archivo en el 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.

Por ejemplo, la siguiente instrucción BULK INSERT realiza la importación masiva de datos en una tabla SalesOrderDetail de la base de datos AdventureWorks desde un archivo de datos denominado 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. Este archivo de datos reside en una carpeta compartida llamada \dailyorders en un directorio compartido de red llamado salesforce de un sistema llamado 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 Esta restricción no se aplica a la utilidad bcp debido a que el cliente lee el archivo independiente de SQL ServerSQL Server.NOTE This restriction does not apply to the bcp utility because the client reads the file independently of SQL ServerSQL Server.

Vea tambiénSee also

INSERT (Transact-SQL) INSERT (Transact-SQL)
SELECT (cláusula de Transact-SQL) SELECT Clause (Transact-SQL)
Importar y exportar datos en bloque (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)
bcp (utilidad) bcp Utility
BULK INSERT (Transact-SQL) BULK INSERT (Transact-SQL)