Compartir a través de


SET IDENTITY_INSERT (Transact-SQL)

Se aplica a:SQL ServerBase de datos de Azure SQLAzure SQL Managed InstanceAzure Synapse Analytics

Permite insertar valores explícitos en la columna identidad de una tabla.

Convenciones de sintaxis de Transact-SQL

Sintaxis

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

Argumentos

database_name

Nombre de la base de datos en la que reside la tabla especificada.

schema_name

Nombre del esquema al que pertenece 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 establecida en ONy se emite una instrucción SET IDENTITY_INSERT ON para otra tabla, SQL Server devuelve un mensaje de error que indica que SET IDENTITY_INSERT ya está ONe informa de la tabla para la que se establece ON.

Si el valor insertado es mayor que el valor de identidad actual de la tabla, SQL Server utiliza automáticamente el nuevo valor insertado como 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

El usuario debe poseer la tabla o tener ALTER permiso en la tabla.

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 de INSERT anterior debe devolver 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