Manter valores de identidade ao importar dados em massa (SQL Server)
Os dados de arquivo que contêm valores de identidade podem ser importados em massa para uma instância do Microsoft SQL Server. Por padrão, os valores da coluna de identidade do arquivo de dados que é importado são ignorados e o SQL Server atribui valores exclusivos automaticamente. Os valores exclusivos são baseados nos valores de semente e incremento que são especificados durante a criação da tabela.
Se o arquivo de dados não contiver valores para a coluna de identificador na tabela, use um arquivo de formato para especificar que a coluna de identificador na tabela deve ser ignorada durante a importação dos dados. O SQL Server atribui automaticamente valores exclusivos para a coluna.
Para impedir SQL Server a atribuição de valores de identidade durante a importação em massa de linhas de dados, use o qualificador de comando manter identidade apropriado. Quando você especificar um qualificador de manter identidade, o SQL Server usa os valores de identidade no arquivo de dados. Estes qualificadores são os seguintes:
Comando |
Qualificador manter identidade |
Tipo de qualificador |
---|---|---|
bcp |
-E |
Opção |
BULK INSERT |
KEEPIDENTITY |
Argumento |
INSERT ... SELECT * FROM OPENROWSET(BULK...) |
KEEPIDENTITY |
Dica de tabela |
Para obter mais informações, consulte Utilitário bcp, BULK INSERT (Transact-SQL), OPENROWSET (Transact-SQL), INSERT (Transact-SQL), SELECT (Transact-SQL) e Dicas de tabela (Transact-SQL).
Observação |
---|
Para criar um número incrementado automaticamente, que pode ser usado em várias tabelas ou ser chamado a partir de aplicativos, sem fazer referência a nenhuma tabela, consulte Números de sequência. |
Exemplos
Os exemplos neste tópico importam em massa dados usando INSERT ... SELECT * FROM OPENROWSET(BULK...) e mantendo os valores padrão.
Tabela de exemplo
Os exemplos de importação em massa requerem que uma tabela denominada tabela myTestKeepNulls seja criada no banco de dados do exemplo AdventureWorks no esquema dbo. Para criar essa tabela. No Editor de Consultas do SQL Server Management Studio, execute:
USE AdventureWorks;
GO
SELECT * INTO HumanResources.myDepartment
FROM HumanResources.Department
WHERE 1=0;
GO
SELECT * FROM HumanResources.myDepartment;
A tabela Department na qual o myDepartment é baseado tem IDENTITY_INSERT definido como OFF. Portanto, para importar dados para uma coluna de identidade, você deve especificar KEEPIDENTITY ou o esquema -E.
Arquivo de dados de exemplo
O arquivo de dados usado nos exemplos da importação em massa contém massa de dados exportada da tabela HumanResources.Department em formato nativo. Para criar esse arquivo de dados, no prompt de comando do Microsoft Windows, digite:
bcp AdventureWorks.HumanResources.Department out myDepartment-n.Dat -n -T
Arquivo de formato de exemplo
Estes exemplos de importação em massa usam um arquivo de formato XML, myDepartment-f-x-n.Xml, que usa formatos de dados nativos. Esse exemplo usa bcp para criar a geração desse arquivo de formato a partir da tabela HumanResources.Department do banco de dados AdventureWorks. No prompt de comando do Windows, digite:
bcp AdventureWorks.HumanResources.Department format nul -n -x -f myDepartment-f-n-x.Xml -T
Para obter mais informações sobre como criar um arquivo de formato, consulte Criar um formato de arquivo (SQL Server).
A.Usando bcp e mantendo valores de identidade
O exemplo a seguir demonstra como manter valores de identidade ao usar o bcp para realizar a importação em massa dos dados. O comando bcp usa o arquivo de formato myDepartment-f-n-x.Xml e contém as seguintes opções:
Qualificadores |
Descrição |
---|---|
-E |
Especifica que o valor ou valores de identidade no arquivo de dados serão usados para a coluna de identidade. |
-T |
Especifica que o utilitário bcp faz conexão com o SQL Server por meio de uma conexão confiável. |
No prompt de comando do Windows, digite:
bcp AdventureWorks.HumanResources.myDepartment in C:\myDepartment-n.Dat -f C:\myDepartment-f-n-x.Xml -E -T
B.Usando BULK INSERT e mantendo valores de identidade
Os exemplos a seguir usam BULK INSERT para importar em massa dados do arquivo myDepartment-c.Dat na tabela AdventureWorks.HumanResources.myDepartment. A instrução usa o formato de arquivo myDepartment-f-n-x.Xml e inclui a opção de KEEPIDENTITY para assegurar que quaisquer valores de identidade no arquivo de dados são retidos.
No Editor de Consultas do SQL Server Management Studio, execute:
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.Usando OPENROWSET e mantendo valores de identidade
O exemplo abaixo usa o provedor de conjunto de linhas OPENROWSET para importar em massa dados do arquivo myDepartment-c.Dat na tabela AdventureWorks.HumanResources.myDepartment. A instrução usa o formato de arquivo myDepartment-f-n-x.Xml e inclui a dica de KEEPIDENTITY para assegurar que quaisquer valores de identidade no arquivo de dados são retidos.
No Editor de Consultas do SQL Server Management Studio, execute:
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
Tarefas relacionadas
Manter valores nulos ou use os valores padrão durante a importação em massa (SQL Server)
Preparar dados para exportar ou importar em massa (SQL Server)
Para usar um arquivo de formato
Usar um arquivo de formato para importação em massa de dados (SQL Server)
Usar um arquivo de formato para ignorar um campo de dados (SQL Server)
Usar um arquivo de formato para ignorar uma coluna de tabela (SQL Server)
Para usar formatos de dados para importação ou exportação em massa
Importar dados de formato de caractere e nativo de versões anteriores do SQL Server
Usar o formato de caractere para importar ou exportar dados (SQL Server)
Usar o formato nativo para importar ou exportar dados (SQL Server)
Usar o formato de caractere Unicode para importar ou exportar dados (SQL Server)
Usar o formato nativo Unicode para importar ou exportar dados (SQL Server)
Para especificar formatos de dados para compatibilidade usando bcp
Especificar o tamanho de prefixo em arquivos de dados usando bcp (SQL Server)
Especificar tipo de armazenamento de arquivo usando bcp (SQL Server)