Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 12386|Odpowiedź: 0

[Źródło] SqlServer implementuje identyfikator nowo wstawionego rekordu

[Skopiuj link]
Opublikowano 15.06.2016 11:45:40 | | |

Ź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








Poprzedni:SQLServer implementuje uniwersalną metodę rozdzielania ciągów znaków
Następny:Podziel się przydatnym artefaktem wyszukiwania
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com