2011-04-26 17 views
13

Jaki jest zakres SET IDENTITY_INSERT xyz ON?Jaki jest zakres SET IDENTITY_INSERT xyz ON?

Jeśli używam tego w jednej procedurze przechowywanej dla konkretnej tabeli, co się stanie, jeśli inny użytkownik wykonujący inną procedurę wstawi do tej konkretnej tabeli w tym samym czasie?

Co się stanie, jeśli różni użytkownicy/procedury będą próbować ustawić SET IDENTITY_INSERT xyz ON dla różnych stołów w tym samym czasie?

+0

Byłbym bardzo nieufny wobec robienia tego bez względu na wszystko. Wstawianie set_identity powinno być wykonywane rzadko i sporadycznie importować dane z innego systemu, który musi zachować swoją tożsamość zwykle tylko przy pierwszym uruchomieniu systemu. Bardzo słabą praktyką jest używanie tego w aplikacji. Co jeśli dwaj użytkownicy chcą wstawić tę samą wartość dla różnych rekordów. Istnieje powód, dla którego tożsamości są generowane automatycznie i powinny pozostać w ten sposób lub nie powinieneś ich używać. – HLGEM

+1

@HLGEM, jest to część funkcji przywracania, w której usunięte dane są dodawane z powrotem (skopiowane z tabeli dziennika historycznego) – RacerX

Odpowiedz

11

Jest to opcja sesji, w której tabela może mieć opcję tylko dla jednej tabeli na raz, ale wiele różnych sesji może mieć ją włączoną dla tej samej tabeli (nie jestem pewien, czy kiedykolwiek byłby to dobry pomysł!)

Po zakończeniu przetwarzania podrzędnego (ustawienie tej opcji) wygląda na to, że jest automatycznie usuwane z połączenia.

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 
+0

wykonuje sesję = połączenie? – RacerX

+0

@RacerX - Tak, ale widzę mój komentarz o tym, że jest resetowany, gdy przejdziesz do stosu wywołań. –

3

moich testów (SQL 2008 R2) pokazuje, że spec tożsamość na kolumnie nadal rozdaje odpowiednie wartości w jednej sesji, nawet jeśli tabela ma IDENTITY_INSERT ON w innej sesji.

Powinieneś być w stanie wprowadzić dane wsadowe do tabeli z określonymi wartościami kolumny tożsamości w jednej sesji (z IDENTITY_INSERT ON), podczas gdy inny użytkownik (w innej sesji) zależy od normalnej funkcji kolumny tożsamości.

Powiązane problemy