Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Was ist der Geltungsbereich von SET IDENTITY_INSERT xyz ON?

Es ist eine Sitzungsoption, die ein Tisch nur für einen Tisch gleichzeitig aktivieren kann, aber mehrere verschiedene Sitzungen können sie für denselben Tisch aktiviert haben (obwohl ich nicht sicher bin, ob das jemals eine gute Idee wäre!)

Wenn ein untergeordneter Stapel beendet wird (der diese Option festlegt), sieht es so aus, als würde er automatisch für die Verbindung deaktiviert.

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