Funkcja pobierania wartości identyfikacyjnej w SQL SERVER 2000 W SQL Server 2000 kolumna tożsamości jest definiowana przez IDENTITY, a następujące elementy dotyczą uzyskania wartości tożsamości ostatniego wstawionego rekordu
Przykładowa ilustracja funkcji wyłączonej
W SQL Serverze możesz użyć SCOPE_IDENTITY(), @@IDENTITY, IDENT_CURRENT(), aby uzyskać wartość ostatniego wstawionego rekordu, a różnica między nimi jest następująca: SCOPE_IDENTITY() zwraca ostatnią wartość IDENTITY wstawioną w kolumnie IDENTITY w tym samym zakresie. Zakres to moduł – procedury przechowywane, wyzwalacze, funkcje
Liczby lub partie. Dlatego jeśli dwa stwierdzenia są w tej samej procedurze przechowywanej, funkcji lub partii, są w tym samym zakresie. @@IDENTITY Zwraca ostatnią wartość identyfikacyjną wygenerowaną we wszystkich tabelach w bieżącej sesji IDENT_CURRENT() zwraca ostatnią wartość identyfikacyjną wygenerowaną dla określonej tabeli w dowolnej sesji i dowolnym zakresie Oto przykład, który ilustruje ich różnice
-- a) Przykładowy kod -- =========================================== -- Utworzenie tabeli testowej -- =========================================== UŻYJ tempdb IDŹ
CREATE TABLE t1(id int IDENTITY, col int) WSTAW t1 WYBIERZ 1 UNION ALL SELECT 2 CREATE TABLE t2(id int IDENTITY,col int) IDŹ
UTWÓRZ TR_insert_t2 WYZWALACZA NA T2 DO INSERTU AS WSTAW T1 SELECT 3 IDŹ
-- =========================================== -- Przetestować trzy funkcje: 1 -- =========================================== WSTAW WARTOŚCI T2(1) WYBIERZ [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), [@@IDENTITY]=@@IDENTITY, [IDENT_CURRENT() Dla t1]=IDENT_CURRENT(N't1'), [IDENT_CURRENT() Dla t2]=IDENT_CURRENT(N't2')
/*--Wynik SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Dla t1 IDENT_CURRENT() Dla t2 ------------------ ------------ -------------------------- ----------------------- 1 3 3 1
(Liczba wierszy objętych zmianą wynosi 1 wiersz) --*/ IDŹ
-- =========================================== -- Przetestować trzy funkcje: 2 -- =========================================== WSTAW WARTOŚCI T1(10) WYBIERZ [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), [@@IDENTITY]=@@IDENTITY, [IDENT_CURRENT() Dla t1]=IDENT_CURRENT(N't1'), [IDENT_CURRENT() Dla t2]=IDENT_CURRENT(N't2')
/*--Wynik SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Dla t1 IDENT_CURRENT() Dla t2 ------------------ ------------ -------------------------- ----------------------- 4 4 4 1
(Liczba wierszy objętych zmianą wynosi 1 wiersz) --*/ IDŹ
-- =========================================== -- Przetestować trzy funkcje: 3 -- ** Otwórz nowe połączenie i wykonaj następujący kod ** -- =========================================== WYBIERZ [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), [@@IDENTITY]=@@IDENTITY, [IDENT_CURRENT() Dla t1]=IDENT_CURRENT(N't1'), [IDENT_CURRENT() Dla t2]=IDENT_CURRENT(N't2')
/*--Wynik SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Dla t1 IDENT_CURRENT() Dla t2 ------------------ ------------ -------------------------- ----------------------- NULL NULL 4&n
--=========================================== -- Usuń środowisko testowe -- =========================================== TABELA DROP t1,t2
-- b) Opis wyniku kodu Jak widać w powyższym kodzie: IDENT_CURRENT() zawsze zwraca ostatnią zidentyfikowaną wartość wprowadzoną w podanej tabeli @@IDENTITY Zwraca wartość tożsamości bieżącej sesji, niezależnie od tego, czy jest w tym samym zakresie, czy nie, w testach 1 i 2 widać, że zwraca wartość tożsamości wstawionego rekordu w wyzwalaczu, oraz w
W Teście 3 zwraca się NULL, ponieważ w bieżącej sesji nie ma zapisu wstawienia SCOPE_IDENTITY() zwraca wartość identyfikacyjną tego samego zakresu bieżącej sesji, więc w teście 1, 2 zwraca wartość niezamierzoną przez wyzwalacz, a w teście 3, ponieważ bieżąca sesja nie jest interpolowana
record, więc zwraca NULL
|