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
Mantener valores NULL o usar valores predeterminados durante la importación masiva (SQL Server)
Preparar los datos para exportar o importar de forma masiva (SQL Server)
Para usar un archivo de formato
Uso de un archivo de formato para la importación en bloque de datos (SQL Server)
Uso de un archivo de formato para omitir un campo de datos (SQL Server)
Usar un archivo de formato para omitir una columna de tabla (SQL Server)
Para usar formatos de datos para la importación o exportación masivas
Importar datos con formato nativo y de caracteres de versiones anteriores de SQL Server
Uso del formato de caracteres para importar o exportar datos (SQL Server)
Uso del formato nativo para importar o exportar datos (SQL Server)
Uso del formato de caracteres Unicode para importar o exportar datos (SQL Server)
Usar el formato nativo Unicode para importar o exportar datos (SQL Server)
Para especificar formatos de datos por razones de compatibilidad cuando se usa bcp
Especificar la longitud de prefijo en los archivos de datos mediante bcp (SQL Server)
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)