Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Qual è l'ambito di SET IDENTITY_INSERT xyz ON?

È un'opzione di sessione su cui un tavolo può avere l'opzione solo per un tavolo alla volta, ma più sessioni diverse possono averla attiva per lo stesso tavolo (non sono sicuro che sarebbe mai una buona idea!)

Al termine di un batch figlio (che imposta questa opzione), sembra che venga automaticamente disattivato per la connessione.

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