Źródło: Internet Author: Unknown
- Tworzenie baz danych i tabel
stwórz bazę danych MyDataBase
użyj MyDataBase
Stwórz tabelę w Mytable
id int tożsamość(1,1),
Imię Varchar(20)
)
--Wykonaj ten SQL, aby sprawdzić wartość kolumny samoprzyrostowej odpowiadającej właśnie wstawionemu rekordowi
wstaw do wartości mytable ('Li Si')
Wybierz @@identity
2. Porównanie trzech metod
W SQL Server 2000 istnieją trzy podobne funkcje: SCOPE_IDENTITY, IDENT_CURRENT i @@IDENTITY, z których wszystkie zwracają wartości wstawione do kolumny IDENTITY.
IDENT_CURRENT Zwraca ostatnią wartość identyfikacyjną wygenerowaną dla konkretnej tabeli w dowolnej sesji i w dowolnym zakresie. IDENT_CURRENT Nie ograniczone zakresem i sesją, lecz określoną tabelą. IDENT_CURRENT Zwraca wartość wygenerowaną dla konkretnej tabeli w dowolnej sesji i zakresie.
@@IDENTITY Zwraca ostatnią wartość identyfikacyjną wygenerowaną dla dowolnej tabeli we wszystkich zakresach bieżącej sesji.
SCOPE_IDENTITY Zwraca ostatnią zidentyfikowaną wartość wygenerowaną dla bieżącej sesji oraz dowolną tabelę w aktualnym zakresie
SCOPE_IDENTITY i @@IDENTITY zwracają ostatnią wartość identyfikacyjną wygenerowaną w dowolnej tabeli w bieżącej sesji. Jednak SCOPE_IDENTITY zwraca jedynie wartości wprowadzone do bieżącego zakresu; @@IDENTITY Nie ogranicza się do konkretnego zakresu.
Na przykład istnieją dwie tabele, T1 i T2, na których zdefiniowany jest wyzwalacz INSERT. Gdy wiersz zostanie wstawiony do T1, wyzwalacz jest wyzwalany, a wiersz wstawiany jest do T2. Ten przykład ilustruje dwa zakresy: jeden na T1, drugi na T2 w wyniku wyzwalania.
Zakładając, że zarówno T1, jak i T2 mają kolumny IDENTITY, @@IDENTITY i SCOPE_IDENTITY zwrócą różne wartości na końcu instrukcji INSERT na T1.
@@IDENTITY Zwraca ostatnią wartość kolumny IDENTITY wstawioną do dowolnego zakresu w bieżącej sesji, czyli wartość wprowadzoną w T2.
SCOPE_IDENTITY() zwraca wartość IDENTITY wprowadzoną w T1, która jest ostatnim INSERT, który wystąpił w tym samym zakresie. Jeśli funkcja SCOPE_IDENTITY() zostanie wywołana przed pojawieniem się instrukcji wstawienia do kolumny tożsamości w zakresie, funkcja zwraca wartość NULL.
Wartości zwracane przez IDENT_CURRENT('T1') i IDENT_CURRENT('T2') są ostatnimi wartościami samoprzyrostowymi obu tabel, odpowiednio.
Eksperyment AJQC: (40 lokalnych wątków, 40+40 wątków zdalnych jednocześnie testuje się, wstawiając wiersze 1200W), wniosek jest następujący:
1. W typowych zastosowaniach kaskadowych. @@IDENTITY nie może być używana, a konflikty równoczesne wystąpią, gdy 1W jest wielorzędowe na maszynach CII850, 256M, SD. Na P42.8C i 512M DDR występuje równoległy konflikt, gdy jest tylko ponad 6000 linii.
2.SCOPE_IDENTITY() jest absolutnie niezawodna i może być używana w procesie pamięci, nawet wyzwalacze nie muszą być budowane, a nie występują żadne równoległe konflikty
SELECT IDENT_CURRENT('TableName') - Zwraca ostatnią wartość etykiety wygenerowaną w podanej tabeli
SELECT IDENT_INCR('TableName') - zwraca oznaczoną wartość przyrostu pola dla określonej tabeli
SELECT IDENT_SEED('TableName') - zwraca oznaczoną wartość zalążkową pola dla określonej tabeli
Automatycznie zwraca numer ostatniego wstawionego rekordu
WYBIERZ IDENT_CURRENT('TableName')
Powrót do następnego numeru automatycznego:
WYBIERZ IDENT_CURRENT('TableName')+(SELECT IDENT_INCR('TableName'))
SELECT @@IDENTITY - Zwraca ostatnią oznaczoną wartość wygenerowaną we wszystkich tabelach w bieżącej sesji
|