Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Qual é o escopo de SET IDENTITY_INSERT xyz ON?


É uma opção de sessão que uma mesa só pode ter a opção para qualquer mesa de cada vez, mas várias sessões diferentes podem ativá-la para a mesma mesa (não tenho certeza de que seria uma boa ideia!)

Quando um lote filho termina (que define essa opção), parece que ele é automaticamente desmarcado para a conexão.
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*/