SET IDENTITY_INSERT (Transact-SQL)

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureAzure Synapse AnalyticsBanco de Dados SQL no Microsoft Fabric

Usando essa sentença, você pode inserir valores explícitos na IDENTITY coluna de uma tabela.

Convenções de sintaxe de Transact-SQL

Sintaxe

SET IDENTITY_INSERT [ [ database_name . ] schema_name . ] table_name { ON | OFF }

Argumentos

database_name

O nome do banco de dados onde a tabela especificada reside.

schema_name

O nome do esquema que contém a tabela.

table_name

O nome de uma tabela com uma coluna de identidade.

Comentários

A qualquer momento, apenas uma tabela em uma sessão pode ter a propriedade IDENTITY_INSERT definida como ON. Se uma tabela já tiver essa propriedade definida como ON, e você emite uma SET IDENTITY_INSERT ON instrução para outra tabela, o SQL Server retorna uma mensagem de erro que afirma SET IDENTITY_INSERT que já ONestá , e reporta a tabela para a qual ON está definida.

  • Quando o argumento increment da IDENTITY função é positivo e o valor inserido é maior que o valor de identidade atual da tabela, o SQL Mecanismo de Banco de Dados usa automaticamente o novo valor inserido como o valor de identidade atual.
  • Quando o argumento increment da IDENTITY função é negativo e o valor inserido é menor que o valor de identidade atual da tabela, o SQL Server automaticamente usa o novo valor inserido como o valor de identidade atual.

A configuração de SET IDENTITY_INSERT é definida em tempo de execução ou de execução e não em tempo de análise.

Permissões

Você deve ser dono da mesa ou ter ALTER permissão para a mesa.

Exemplos

O exemplo a seguir cria uma tabela com uma coluna de identidade e mostra como a configuração SET IDENTITY_INSERT pode ser usada para preencher uma lacuna nos valores de identidade causados por uma instrução DELETE.

USE AdventureWorks2022;
GO

Criar tabela de ferramentas.

CREATE TABLE dbo.Tool
(
    ID INT IDENTITY NOT NULL PRIMARY KEY,
    Name VARCHAR (40) NOT NULL
);
GO

Insira valores na tabela de produtos.

INSERT INTO dbo.Tool (Name)
VALUES ('Screwdriver'),
    ('Hammer'),
    ('Saw'),
    ('Shovel');
GO

Crie uma lacuna nos valores de identidade.

DELETE dbo.Tool
WHERE Name = 'Saw';
GO

SELECT *
FROM dbo.Tool;
GO

Tente inserir um valor de ID explícito de 3.

INSERT INTO dbo.Tool (ID, Name)
VALUES (3, 'Garden shovel');
GO

O código anterior INSERT retorna o seguinte erro:

An explicit value for the identity column in table 'AdventureWorks2022.dbo.Tool' can only be specified when a column list is used and IDENTITY_INSERT is ON.

Defina IDENTITY_INSERT como ON.

SET IDENTITY_INSERT dbo.Tool ON;
GO

Tente inserir um valor de ID explícito de 3.

INSERT INTO dbo.Tool (ID, Name)
VALUES (3, 'Garden shovel');
GO

SELECT *
FROM dbo.Tool;
GO

Solte a tabela de ferramentas.

DROP TABLE dbo.Tool;
GO