Importar de forma masiva datos mediante BULK INSERT u OPENROWSET(BULK...) (SQL Server)

En este tema se ofrece información general acerca de cómo usar las instrucciones Transact-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 Server. 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.

[!NOTA]

Cuando use BULK INSERT u OPENROWSET(BULK…), es importante comprender el modo en que la versión de SQL Server trata la suplantación. Para obtener más información, vea la sección "Consideraciones relativas a la seguridad" más adelante en este tema.

Instrucción BULK INSERT

BULK INSERT carga datos de un archivo de datos a una tabla. 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 Server. Para obtener una descripción de la sintaxis de BULK INSERT, vea BULK INSERT (Transact-SQL).

Ejemplos

Para obtener ejemplos de BULK INSERT, vea:

Función OPENROWSET(BULK…)

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. 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.

Para realizar una importación masiva de datos, llame a OPENROWSET(BULK…) desde una cláusula SELECT…FROM en una instrucción INSERT. La sintaxis básica de una importación masiva de datos es:

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

Cuando se usa en una instrucción INSERT, OPENROWSET(BULK...) admite sugerencias de tabla. 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. Para obtener más información, vea Sugerencias de tabla (Transact-SQL).

Para obtener información acerca de los usos adicionales de la opción BULK, vea OPENROWSET (Transact-SQL).

Ejemplos

Para obtener ejemplos de instrucciones INSERT...SELECT * FROM OPENROWSET(BULK...), vea los temas siguientes:

Consideraciones relativas a la seguridad

Si un usuario utiliza un inicio de sesión de SQL Server, se utilizará el perfil de seguridad de la cuenta de proceso de SQL Server. Un inicio de sesión que use autenticación de SQL Server no se puede autenticar fuera del Motor de base de datos. 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). 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. Por el contrario, si un usuario de SQL Server inicia sesión con autenticación de Windows, el usuario solo puede leer aquellos archivos a los que tenga acceso la cuenta de usuario, cualquiera que sea el perfil de seguridad del proceso de SQL Server.

Por ejemplo, imagine un usuario que ha iniciado sesión en una instancia de SQL Server mediante autenticación de Windows. Para que el usuario pueda utilizar BULK INSERT u OPENROWSET para importar datos de un archivo de datos a una tabla de SQL Server, la cuenta de usuario necesita acceso de lectura para el archivo de datos. Como el usuario dispone de acceso al archivo de datos, podrá importar datos del archivo a la tabla, aunque el proceso de SQL Server no tenga permiso de acceso al archivo. El usuario no tiene que conceder permiso de acceso a archivos al proceso de SQL Server.

Puede configurar SQL Server y Microsoft Windows para permitir que una instancia de SQL Server se conecte a otra instancia de SQL Server mediante el reenvío de las credenciales de un usuario de Windows autenticado. Esto se conoce como suplantación o delegación. Es importante entender cómo la versión de SQL Server trata la seguridad en la suplantación de usuarios al utilizar BULK INSERT u OPENROWSET. La suplantación de usuarios permite que el archivo de datos resida en un equipo diferente al del proceso de SQL Server o del usuario. Por ejemplo, si un usuario del Equipo_A tiene acceso a un archivo de datos del Equipo_B y la delegación de credenciales se ha establecido correctamente, el usuario puede conectarse a una instancia de SQL Server que se esté ejecutando en el Equipo_C, tener acceso al archivo de datos del Equipo_B y realizar una importación masiva de datos desde ese archivo a una tabla en el Equipo_C.

Importación masiva desde un archivo de datos remoto

Para usar BULK INSERT o INSERT...SELECT * FROM OPENROWSET(BULK...) para la importación masiva de datos desde otro equipo, el archivo de datos debe estar compartido entre los dos equipos. Para especificar un archivo de datos compartido, use la convención de nomenclatura universal (UNC) para el nombre, que tiene la forma general de **\\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.

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. Este archivo de datos reside en una carpeta compartida llamada \dailyorders en un directorio compartido de red llamado salesforce de un sistema llamado 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 independientemente de SQL Server.

Vea también

Referencia

INSERT (Transact-SQL)

SELECT (cláusula de Transact-SQL)

OPENROWSET (Transact-SQL)

SELECT (Transact-SQL)

FROM (Transact-SQL)

bcp (utilidad)

BULK INSERT (Transact-SQL)

Conceptos

Importar y exportar datos de forma masiva (SQL Server)