sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cuál es el alcance de SET IDENTITY_INSERT xyz ON?

Es una opción de sesión en la que una mesa solo puede tener la opción para una mesa a la vez, pero varias sesiones diferentes pueden tenerla activada para la misma mesa (¡aunque no estoy seguro de que sea una buena idea!)

Cuando finaliza un lote secundario (que establece esta opción), parece que se desarma automáticamente para la conexión.

CREATE TABLE Tst
(C INT IDENTITY(1,1))

EXEC('SET IDENTITY_INSERT Tst ON')
INSERT INTO Tst(C) VALUES (1) /*Fails - Complains IDENTITY_INSERT is off*/

SET IDENTITY_INSERT Tst ON
EXEC('INSERT INTO Tst(C) VALUES (1)') /*Succeeds this way round*/
SET IDENTITY_INSERT Tst OFF


SET IDENTITY_INSERT Tst ON
EXEC('SET IDENTITY_INSERT Tst ON; INSERT INTO Tst(C) VALUES (1);') /* Also succeeds like this*/