Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Quelle est la portée de SET IDENTITY_INSERT xyz ON ?

C'est une option de session qu'une table ne peut avoir que pour une seule table à la fois, mais plusieurs sessions différentes peuvent l'avoir pour la même table (pas sûr que ce soit une bonne idée cependant !)

Lorsqu'un lot enfant se termine (qui définit cette option), il semble qu'il soit automatiquement désactivé pour la connexion.

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*/