Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Aplica a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Almacén en Microsoft Fabric
Base de datos SQL en Microsoft Fabric
Crea una columna de identidad en una tabla. Esta propiedad se utiliza con las CREATE TABLE sentencias y ALTER TABLE Transact-SQL.
Note
La propiedad IDENTITY no es la misma que la propiedad Identity de SQL-DMO, que expone la propiedad de identidad de las filas de una columna.
Convenciones de sintaxis de Transact-SQL
Syntax
Sintaxis para Fabric Data Warehouse:
IDENTITY
IDENTITY [ (seed , increment) ]
Arguments
seed
El valor que se utiliza para la primera fila cargada en la tabla.
increment
El valor incremental que se agrega al valor de identidad de la anterior fila cargada.
Debe especificar tanto el valor de inicialización como el incremento, o bien ninguno de los dos. Si no se especifica ninguno, el valor predeterminado es (1,1).
Remarks
Las columnas de identidad pueden usarse para generar valores de clave.
La propiedad de identidad de una columna garantiza las siguientes condiciones:
Cada nuevo valor se genera basándose en el valor actual de inicialización e incremento.
Cada nuevo valor de una transacción determinada es diferente de otras transacciones simultáneas de la tabla.
La propiedad de identidad de una columna no garantiza las siguientes condiciones:
Unicidad del valor: La unicidad debe aplicarse mediante una restricción
PRIMARY KEYoUNIQUEo el índiceUNIQUE.Valores consecutivos en una transacción: No se garantiza que una transacción que inserta varias filas obtenga valores consecutivos para las filas porque podrían producirse otras inserciones simultáneas en la tabla. Si los valores deben ser consecutivos, la transacción debe usar un bloqueo exclusivo en la tabla o usar el nivel de aislamiento
SERIALIZABLE.Valores consecutivos después de un reinicio del servidor u otros errores: SQL Server podría almacenar en memoria caché los valores de identidad por motivos de rendimiento y algunos de los valores asignados podrían perderse durante un error de la base de datos o un reinicio del servidor. Esto puede tener como resultado espacios en el valor de identidad al insertarlo. Si no es aceptable que haya espacios, la aplicación debe usar mecanismos propios para generar valores de clave. El uso de un generador de secuencias con la opción
NOCACHEpuede limitar los espacios a transacciones que nunca se llevan a cabo.Reutilización de valores: Para una propiedad de identidad determinada, con un valor de inicialización e incremento específico, el motor no reutiliza los valores de identidad. Si una instrucción de inserción concreta produce un error o si la instrucción de inserción se revierte, los valores de identidad utilizados se pierden y no vuelven a generarse. Esto puede tener como resultado espacios cuando se generan los valores de identidad siguientes.
Estas restricciones forman parte del diseño para mejorar el rendimiento y porque son aceptables en muchas situaciones comunes. Si no puede usar valores de identidad debido a estas restricciones, cree una tabla independiente que contenga un valor actual y administre el acceso a la tabla y la asignación de números con su aplicación.
Si una tabla con una columna de identidad se publica para replicarla, la columna de identidad debe administrarse de manera apropiada para el tipo de replicación utilizado. Para más información, vea Replicar columnas de identidad.
En las tablas optimizadas para memoria, el valor de inicialización y el valor de incremento debe establecerse en 1, 1. Si establece el valor de inicialización o de incremento en un valor que no sea 1, se produce el siguiente error: The use of seed and increment values other than 1 is not supported with memory optimized tables.
Solo se puede crear una columna de identidad para cada tabla.
Una vez establecida la propiedad de identidad en una columna, no se puede quitar. El tipo de datos se puede cambiar siempre que el nuevo tipo de datos sea compatible con la propiedad de identidad.
En Fabric Data Warehouse, no se puede especificar seed ni increment, ya que estos valores se gestionan automáticamente para proporcionar enteros únicos.
BIGINT IDENTITY es todo lo que se requiere para una definición de columna en una CREATE TABLE sentencia. Para más información, consulte IDENTITY en Fabric Data Warehouse.
Puedes migrar tablas a Fabric Data Warehouse con columnas clave sustitutas tras adaptarte a las diferencias en la IDENTITY implementación de Fabric Data Warehouse.
Azure Synapse Analytics no admite la restricción PRIMARY KEY o UNIQUE o el índice UNIQUE. Para más información, consulte Uso de IDENTITY para crear claves suplentes en un grupo de Synapse SQL.
- En pools SQL dedicados en Azure Synapse Analytics, los valores de identidad no son incrementales debido a la arquitectura distribuida del data warehouse. Para más información, consulte Uso de IDENTITY para crear claves suplentes en un grupo de Synapse SQL.
-
IDENTITY no es compatible con pools SQL serverless en Azure Synapse Analytics.
Examples
A. Usar la propiedad IDENTITY con CREATE TABLE
En el siguiente ejemplo se crea una nueva tabla con la propiedad IDENTITY para un número de identificación que se incrementa automáticamente.
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. Usar la sintaxis genérica para buscar espacios en los valores de identidad
En este ejemplo se muestra la sintaxis genérica utilizada para buscar espacios en valores de identidad cuando se quitan datos.
Note
La primera parte del siguiente script de Transact-SQL se ha diseñado solo como ejemplo. Puede ejecutar el script de Transact-SQL que comienza por el comentario: -- 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. Crea una tabla con una columna IDENTITY en Fabric Data Warehouse
Se aplica a: Almacenamiento de datos de tejido
CREATE TABLE dbo.Employees (
EmployeeID BIGINT IDENTITY,
FirstName VARCHAR(50),
LastName VARCHAR(50),
Retired BIT
);
Esta sentencia crea la dbo.Employees tabla donde cada fila nueva recibe automáticamente un valor único EmployeeID como bigint . Para más información, consulte IDENTITY en Fabric Data Warehouse.
Podemos usar entonces SELECT... INTO para crear una copia de esta tabla, manteniendo la IDENTITY propiedad en la tabla objetivo:
SELECT *
INTO dbo.RetiredEmployees
FROM dbo.Employees
WHERE Retired = 1;
La columna de la tabla objetivo hereda la IDENTITY propiedad de la tabla fuente. Para una lista de limitaciones que se aplican a este escenario, consulte la sección de Tipos de Datos de la cláusula SELECT - INTO.