CONJUNTO IDENTITY_INSERT (Transact-SQL)
Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada SQL do Azure do Azure Synapse Analytics
Permite que valores explícitos sejam inseridos na coluna de identidade de uma tabela.
Transact-SQL convenções de sintaxe
Sintaxe
SET IDENTITY_INSERT [ [ database_name . ] schema_name . ] table_name { ON | OFF }
Argumentos
database_name
O nome do banco de dados no qual a tabela especificada reside.
schema_name
O nome do esquema ao qual a tabela pertence.
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 uma instrução SET IDENTITY_INSERT ON
for emitida para outra tabela, o SQL Server retornará uma mensagem de erro informando SET IDENTITY_INSERT
já está ON
e relatará a tabela para a qual ON
está definida.
Se o valor inserido for maior do que o valor de identidade atual da tabela, o SQL Server usará automaticamente o novo valor inserido como o valor de identidade atual.
A configuração de SET IDENTITY_INSERT
é definida em tempo de execução ou execução e não em tempo de análise.
Permissões
O usuário deve possuir a tabela ou ter permissão ALTER
na tabela.
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
Criar 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 de INSERT
anterior deve retornar 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
para 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
Soltar tabela de ferramentas.
DROP TABLE dbo.Tool;
GO