Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Armazém no Microsoft Fabric
Base de dados SQL no Microsoft Fabric
Cria uma coluna de identidade em uma tabela. Esta propriedade é usada com as CREATE TABLE instruções e ALTER TABLE Transact-SQL.
Note
A propriedade IDENTITY é diferente da propriedade SQL-DMO Identity que expõe a propriedade row identity de uma coluna.
Transact-SQL convenções de sintaxe
Syntax
Sintaxe para o Fabric Data Warehouse:
IDENTITY
IDENTITY [ (seed , increment) ]
Arguments
seed
O valor usado para a primeira linha carregada na tabela.
increment
O valor incremental que é adicionado ao valor de identidade da linha anterior que foi carregada.
Você deve especificar a semente e o incremento ou nenhum. Se nenhum dos dois for especificado, o padrão será (1,1).
Remarks
As colunas de identidade podem ser usadas para gerar valores de chave.
A propriedade identity em uma coluna garante as seguintes condições:
Cada novo valor é gerado com base na semente e incremento atuais.
Cada novo valor para uma transação específica é diferente de outras transações simultâneas na tabela.
A propriedade identity em uma coluna não garante as seguintes condições:
Exclusividade do valor - A exclusividade deve ser imposta usando uma
PRIMARY KEYrestriçãoUNIQUEouUNIQUEíndice.Valores consecutivos dentro de uma transação - Não é garantido que uma transação inserindo várias linhas obtenha valores consecutivos para as linhas porque outras inserções simultâneas podem ocorrer na tabela. Se os valores devem ser consecutivos, a transação deve usar um bloqueio exclusivo na tabela ou usar o
SERIALIZABLEnível de isolamento.Valores consecutivos após a reinicialização do servidor ou outras falhas - o SQL Server pode armazenar em cache valores de identidade por motivos de desempenho e alguns dos valores atribuídos podem ser perdidos durante uma falha de banco de dados ou reinicialização do servidor. Isso pode resultar em lacunas no valor de identidade após a inserção. Se as lacunas não forem aceitáveis, o aplicativo deve usar seu próprio mecanismo para gerar valores-chave. Usar um gerador de sequência com a
NOCACHEopção pode limitar as lacunas a transações que nunca são confirmadas.Reutilização de valores - Para uma determinada propriedade de identidade com semente/incremento específico, os valores de identidade não são reutilizados pelo mecanismo. Se uma instrução insert específica falhar ou se a instrução insert for revertida, os valores de identidade consumidos serão perdidos e não serão gerados novamente. Isso pode resultar em lacunas quando os valores de identidade subsequentes são gerados.
Essas restrições fazem parte do design para melhorar o desempenho e porque são aceitáveis em muitas situações comuns. Se você não puder usar valores de identidade devido a essas restrições, crie uma tabela separada contendo um valor atual e gerencie o acesso à tabela e à atribuição de números com seu aplicativo.
Se uma tabela com uma coluna de identidade for publicada para replicação, a coluna de identidade deverá ser gerenciada de forma apropriada para o tipo de replicação usado. Para obter mais informações, consulte Replicar colunas de identidade.
Em tabelas com otimização de memória, a semente e o incremento devem ser definidos como 1, 1. Definir a semente ou incremento para um valor diferente resulta 1 no seguinte erro: The use of seed and increment values other than 1 is not supported with memory optimized tables.
Apenas uma coluna de identidade pode ser criada por tabela.
Depois que a propriedade identity é definida em uma coluna, ela não pode ser removida. O tipo de dados pode ser alterado desde que o novo tipo de dados seja compatível com a propriedade identity.
No Fabric Data Warehouse, não pode especificar seed nem increment, pois estes valores são automaticamente geridos para fornecer inteiros únicos.
BIGINT IDENTITY é tudo o que é necessário para uma definição de coluna numa CREATE TABLE instrução. Para mais informações, consulte IDENTITY no Fabric Data Warehouse.
Pode migrar tabelas para o Fabric Data Warehouse com colunas chave substitutas depois de se adaptar às diferenças na IDENTITY implementação no Fabric Data Warehouse.
O Azure Synapse Analytics não oferece suporte PRIMARY KEYUNIQUE , restrição ou UNIQUE índice. Para obter mais informações, consulte Usando IDENTITY para criar chaves substitutas em um pool Synapse SQL.
- Em pools SQL dedicados no Azure Synapse Analytics, os valores de identidade não são incrementais devido à arquitetura distribuída do data warehouse. Para obter mais informações, consulte Usando IDENTITY para criar chaves substitutas em um pool Synapse SQL.
-
IDENTITY não é suportado por pools SQL serverless no Azure Synapse Analytics.
Examples
A. Use a propriedade IDENTITY com CREATE TABLE
O exemplo a seguir cria uma nova tabela usando a IDENTITY propriedade para um número de identificação de incremento automático.
USE AdventureWorks2022;
GO
IF OBJECT_ID('dbo.new_employees', 'U') IS NOT NULL
DROP TABLE new_employees;
GO
CREATE TABLE new_employees (
id_num INT IDENTITY(1, 1),
fname VARCHAR(20),
minit CHAR(1),
lname VARCHAR(30)
);
INSERT new_employees (fname, minit, lname)
VALUES ('Karin', 'F', 'Josephs');
INSERT new_employees (fname, minit, lname)
VALUES ('Pirkko', 'O', 'Koskitalo');
B. Use sintaxe genérica para encontrar lacunas nos valores de identidade
O exemplo a seguir mostra sintaxe genérica para localizar lacunas em valores de identidade quando os dados são removidos.
Note
A primeira parte do seguinte Transact-SQL script foi concebida apenas para ilustração. Você pode executar o script Transact-SQL que começa com o comentário: -- Create the img table.
-- Here is the generic syntax for finding identity value gaps in data.
-- The illustrative example starts here.
SET IDENTITY_INSERT tablename ON;
DECLARE @minidentval column_type;
DECLARE @maxidentval column_type;
DECLARE @nextidentval column_type;
SELECT @minidentval = MIN($IDENTITY),
@maxidentval = MAX($IDENTITY)
FROM tablename
IF @minidentval = IDENT_SEED('tablename')
SELECT @nextidentval = MIN($IDENTITY) + IDENT_INCR('tablename')
FROM tablename t1
WHERE $IDENTITY BETWEEN IDENT_SEED('tablename')
AND @maxidentval
AND NOT EXISTS (
SELECT *
FROM tablename t2
WHERE t2.$IDENTITY = t1.$IDENTITY + IDENT_INCR('tablename')
)
ELSE
SELECT @nextidentval = IDENT_SEED('tablename');
SET IDENTITY_INSERT tablename OFF;
-- Here is an example to find gaps in the actual data.
-- The table is called img and has two columns: the first column
-- called id_num, which is an increasing identification number, and the
-- second column called company_name.
-- This is the end of the illustration example.
-- Create the img table.
-- If the img table already exists, drop it.
-- Create the img table.
IF OBJECT_ID('dbo.img', 'U') IS NOT NULL
DROP TABLE img;
GO
CREATE TABLE img (
id_num INT IDENTITY(1, 1),
company_name SYSNAME
);
INSERT img (company_name)
VALUES ('New Moon Books');
INSERT img (company_name)
VALUES ('Lucerne Publishing');
-- SET IDENTITY_INSERT ON and use in img table.
SET IDENTITY_INSERT img ON;
DECLARE @minidentval SMALLINT;
DECLARE @nextidentval SMALLINT;
SELECT @minidentval = MIN($IDENTITY)
FROM img
IF @minidentval = IDENT_SEED('img')
SELECT @nextidentval = MIN($IDENTITY) + IDENT_INCR('img')
FROM img t1
WHERE $IDENTITY BETWEEN IDENT_SEED('img')
AND 32766
AND NOT EXISTS (
SELECT *
FROM img t2
WHERE t2.$IDENTITY = t1.$IDENTITY + IDENT_INCR('img')
)
ELSE
SELECT @nextidentval = IDENT_SEED('img');
SET IDENTITY_INSERT img OFF;
A. Crie uma tabela com uma coluna IDENTITY no Fabric Data Warehouse
Aplica-se a: Armazém de dados de malha
CREATE TABLE dbo.Employees (
EmployeeID BIGINT IDENTITY,
FirstName VARCHAR(50),
LastName VARCHAR(50),
Retired BIT
);
Esta instrução cria a dbo.Employees tabela onde cada nova linha recebe automaticamente um valor único EmployeeID como bigint . Para mais informações, consulte IDENTITY no Fabric Data Warehouse.
Podemos então SELECT... INTO usar para criar uma cópia desta tabela, mantendo a IDENTITY propriedade na tabela alvo:
SELECT *
INTO dbo.RetiredEmployees
FROM dbo.Employees
WHERE Retired = 1;
A coluna na tabela alvo herda a IDENTITY propriedade da tabela de origem. Para uma lista de limitações que se aplicam a este cenário, consulte a secção de Tipos de Dados da cláusula SELECT - INTO.