Compartir a través de


Mantener valores de identidad al importar datos de forma masiva (SQL Server)

Archivos de datos que contienen valores de identidad que pueden importarse de forma masiva en una instancia de Microsoft SQL Server. De manera predeterminada, los valores de la columna de identidad del archivo de datos que se importa se omiten y SQL Server asigna automáticamente valores únicos. Los valores únicos se basan en los valores de inicialización y de incremento especificados durante la creación de la tabla.

Si el archivo de datos no contiene valores para la columna de identificadores de la tabla, use el archivo de formato para especificar que se debe omitir esta columna al importar los datos. SQL Server asigna valores únicos para la columna automáticamente.

Para impedir que SQL Server asigne valores de identidad al importar de forma masiva filas de datos en una tabla, utilice el calificador de comando adecuado para mantener la identidad. Al especificar un calificador para mantener la identidad, SQL Server utiliza los valores de identidad del archivo de datos. Estos calificadores son:

Get-Help Calificador para mantener la identidad Tipo de calificador
bcp -E Switch
BULK INSERT KEEPIDENTITY Argumento
INSERT ... SELECT * FROM OPENROWSET(BULK...) KEEPIDENTITY Sugerencia de tabla

Para obtener más información, consulte Utilidad bcp, BULK INSERT (Transact-SQL),OPENROWSET (Transact-SQL), INSERT (Transact-SQL), SELECT (Transact-SQL) y Sugerencias de tabla (Transact-SQL).

Nota

Para crear un número que se incremente automáticamente y que se pueda usar en varias tablas, o que se pueda llamar desde las aplicaciones sin hacer referencia a ninguna tabla, vea Números de secuencia.

Ejemplos

Los ejemplos de este tema importan datos de forma masiva mediante INSERT ... SELECT * FROM OPENROWSET(BULK...) y mantener los valores predeterminados.

Tabla de ejemplo

En ejemplos de importación en bloque, es necesario crear una tabla denominada myTestKeepNulls en la base de datos de ejemplo AdventureWorks en el esquema dbo. Para crear esta tabla en SQL Server Management Studio Editor de Power Query, ejecute:

USE AdventureWorks;  
GO  
SELECT * INTO HumanResources.myDepartment   
   FROM HumanResources.Department  
      WHERE 1=0;  
GO  
SELECT * FROM HumanResources.myDepartment;  

La tabla Department en la que se basa myDepartment tiene IDENTITY_INSERT establecido en OFF. Por tanto, para importar datos en una columna de identidad, debe especificar KEEPIDENTITY o -E.

Archivo de datos de ejemplo

El archivo de datos usado en los ejemplos de importación masiva contiene datos exportados de forma masiva desde la tabla HumanResources.Department en formato nativo. Para crear el archivo de datos, en el símbolo del sistema de Microsoft Windows, escriba:

bcp AdventureWorks.HumanResources.Department out myDepartment-n.Dat -n -T  

Archivo de formato de ejemplo

En este ejemplo de importación masiva se usa un archivo de formato XML, myDepartment-f-x-n.Xml, que usa formatos de datos nativos. En este ejemplo se usa bcp para generar este archivo de formato desde la tabla HumanResources.Department de la base de datos AdventureWorks. En el símbolo del sistema de Windows, escriba:

bcp AdventureWorks.HumanResources.Department format nul -n -x -f myDepartment-f-n-x.Xml -T  

Para obtener más información sobre cómo crear un archivo de formato, vea Crear un archivo de formato (SQL Server).

A. Usar bcp y mantener valores de identidad

En el siguiente ejemplo se muestra cómo mantener valores de identidad al usar bcp para importar datos de forma masiva. El comando bcp usa el archivo de formato, myDepartment-f-n-x.Xml, y contiene los siguientes modificadores:

Calificadores Descripción
-E Especifica el valor o valores de identidad del archivo de datos que se van a usar en la columna de identidad.
-T Especifica que la bcp utilidad se conecta a SQL Server con una conexión de confianza.

En el símbolo del sistema de Windows, escriba:

bcp AdventureWorks.HumanResources.myDepartment in C:\myDepartment-n.Dat -f C:\myDepartment-f-n-x.Xml -E -T  
  

B. Usar BULK INSERT y mantener valores de identidad

En el siguiente ejemplo se utiliza BULK INSERT para realizar una importación masiva de datos desde el archivo myDepartment-c.Dat en la tabla AdventureWorks.HumanResources.myDepartment . La instrucción utiliza el archivo de formato myDepartment-f-n-x.Xml e incluye la opción KEEPIDENTITY para que se mantengan todos los valores de identidad del archivo de datos.

En el SQL Server Management Studio Editor de Power Query, ejecute:

USE AdventureWorks;  
GO  
DELETE HumanResources.myDepartment;  
GO  
BULK INSERT HumanResources.myDepartment  
   FROM 'C:\myDepartment-n.Dat'  
   WITH (  
      KEEPIDENTITY,  
      FORMATFILE='C:\myDepartment-f-n-x.Xml'  
   );  
GO  
SELECT * FROM HumanResources.myDepartment;  
  

C. Usar OPENROWSET y mantener valores de identidad

En el siguiente ejemplo se utiliza el proveedor de conjuntos de filas BULK, OPENROWSET, para realizar una importación masiva de datos desde el archivo myDepartment-c.Dat en la tabla AdventureWorks.HumanResources.myDepartment . La instrucción utiliza el archivo de formato myDepartment-f-n-x.Xml e incluye la sugerencia KEEPIDENTITY para que se mantengan todos los valores de identidad del archivo de datos.

En el SQL Server Management Studio Editor de Power Query, ejecute:

USE AdventureWorks;  
GO  
DELETE HumanResources.myDepartment;  
GO  
  
INSERT INTO HumanResources.myDepartment  
   with (KEEPIDENTITY)  
   (DepartmentID, Name, GroupName, ModifiedDate)  
   SELECT *  
      FROM  OPENROWSET(BULK 'C:\myDepartment-n.Dat',  
      FORMATFILE='C:\myDepartment-f-n-x.Xml') as t1;  
GO  
  

Related Tasks

Para usar un archivo de formato

Para usar formatos de datos para la importación o exportación masivas

Para especificar formatos de datos por razones de compatibilidad cuando se usa bcp

  1. Especificar terminadores de campo y de fila (SQL Server)

  2. Especificar la longitud de prefijo en los archivos de datos mediante bcp (SQL Server)

  3. Especificar el tipo de almacenamiento de archivos mediante bcp (SQL Server)

Consulte también

BACKUP (Transact-SQL)
bcp (utilidad)
BULK INSERT (Transact-SQL)
OPENROWSET (Transact-SQL)
Sugerencias de tabla (Transact-SQL)