SET IDENTITY_INSERT (Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsBase de datos de Azure SQL en Microsoft Fabric

Usando esta sentencia, puedes insertar valores explícitos en la IDENTITY columna de una tabla.

Convenciones de sintaxis de Transact-SQL

Sintaxis

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

Argumentos

database_name

El nombre de la base de datos donde se encuentra la tabla especificada.

schema_name

El nombre del esquema que contiene la tabla.

table_name

Nombre de una tabla con una columna de identidad.

Observaciones

En cualquier momento, solo una tabla de una sesión puede tener la propiedad IDENTITY_INSERT establecida en ON. Si una tabla ya tiene esta propiedad configurada como ON, y emites una SET IDENTITY_INSERT ON instrucción para otra tabla, SQL Server devuelve un mensaje de error que indica SET IDENTITY_INSERT ya ONes , y reporta la tabla para la cual ON está establecida.

  • Cuando el argumento increment de la IDENTITY función es positivo y el valor insertado es mayor que el valor de identidad actual de la tabla, el SQL Motor de base de datos utiliza automáticamente el nuevo valor insertado como el valor de identidad actual.
  • Cuando el argumento increment de la IDENTITY función es negativo y el valor insertado es menor que el valor de identidad actual de la tabla, SQL Server utiliza automáticamente el nuevo valor insertado como el valor de identidad actual.

La configuración de SET IDENTITY_INSERT se establece en tiempo de ejecución o ejecución y no en tiempo de análisis.

Permisos

Debes ser dueño de la mesa o tener ALTER permiso para que la ponga.

Ejemplos

El ejemplo siguiente crea una tabla con una columna de identidad y muestra cómo se puede utilizar la opción SET IDENTITY_INSERT para rellenar un vacío en los valores de identidad causado por una instrucción DELETE.

USE AdventureWorks2022;
GO

Crear tabla de herramientas.

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

Insertar valores en la tabla de productos.

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

Cree una brecha en los valores de identidad.

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

SELECT *
FROM dbo.Tool;
GO

Intente insertar un valor de identificador explícito de 3.

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

El código anterior INSERT devuelve el siguiente error:

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.

Establezca IDENTITY_INSERT en ON.

SET IDENTITY_INSERT dbo.Tool ON;
GO

Intente insertar un valor de identificador explícito de 3.

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

SELECT *
FROM dbo.Tool;
GO

Quitar tabla de herramientas.

DROP TABLE dbo.Tool;
GO