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 ON
y 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á ON
e 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