Importación masiva de datos mediante BULK INSERT u OPENROWSET(BULK...)

Actualizado: 17 de julio de 2006

En este tema se ofrece información general acerca de cómo usar las instrucciones BULK INSERT y INSERT...SELECT * FROM OPENROWSET(BULK...) de Transact-SQL para una importación masiva de datos de un archivo de datos en una tabla de Microsoft 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 el que SQL Server 2005 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…)

SQL Server 2005 incluye el proveedor de conjuntos de filas masivos OPENROWSET, al que se obtiene acceso 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 utiliza 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 (sólo 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 ejemplo 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.

Por el contrario, si un usuario de SQL Server ha iniciado sesión mediante autenticación de Windows, el usuario sólo puede leer los archivos a los que la cuenta de usuario tiene acceso, independientemente del 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 SQL Server 2005 controla 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. Para obtener más información, vea Información general de suplantación.

[!NOTA] La manera en que SQL Server 2005 controla el acceso a los archivos aborda un problema de seguridad que ya estaba presente en Microsoft SQL Server 2000 y versiones anteriores. Anteriormente, después de que el usuario se autenticaba, el acceso a los archivos externos se basaba en el perfil de seguridad del proceso de SQL Server. Si el proceso de SQL Server tenía acceso de lectura a un archivo y el usuario no tenía acceso al archivo pero era miembro de la función fija de servidor bulkadmin, el usuario podía importar el archivo mediante BULK INSERT y tener acceso al contenido del mismo.

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, utilice el nombre UNC, que tiene la forma general de **\\nombreDeServidor\nombreDeRecursoCompartido\rutaDeAcceso\**nombreDeArchivo. La cuenta de usuario que utiliza SQL Server 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 AdventureWorks.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

Conceptos

Importar y exportar datos masivos
Acerca de las operaciones de importación y exportación masivas
Directrices básicas para la importación masiva de datos

Otros recursos

INSERT (Transact-SQL)
Información general de suplantación
INSERT (Transact-SQL)
SELECT (cláusula de Transact-SQL)
OPENROWSET (Transact-SQL)
SELECT (Transact-SQL)
FROM (Transact-SQL)
bcp (utilidad)
BULK INSERT (Transact-SQL)

Ayuda e información

Obtener ayuda sobre SQL Server 2005

Historial de cambios

Versión Historial

17 de julio de 2006

Contenido modificado:
  • Se movió contenido acerca de la utilidad bcp al nuevo tema Importar y exportar datos masivamente con la utilidad bcp.
  • Se revisó la sección "Función OPENROWSET(BULK…)".
  • Se insertaron las secciones "Consideraciones relativas a la seguridad" e "Importación masiva desde un archivo de datos remoto".
  • Se agregaron vínculos en "Otros ejemplos" a temas conceptuales que incluyen ejemplos.

5 de diciembre de 2005

Contenido nuevo:
  • Se agregó una explicación acerca de cómo utilizar un comando Transact-SQL para importar datos desde un archivo de datos remoto.