Udostępnij za pośrednictwem


@@ IDENTITY (Transact-SQL)

Jest system funkcja , która zwraca wartość ostatniego dodaje tożsamości.

Ikona łącza do tematuJęzyka Transact-SQL składni konwencje

Składnia

@@IDENTITY

Zwracane typy

numeric(38,0)

Uwagi

Po WSTAWIENIU SELECT INTO lub kopiowanie masowe instrukcja jest zakończone, @@ IDENTITY zawiera ostatnią wartość tożsamości wygenerowany przez instrukcja.Jeśli instrukcja nie wpływa na wszystkie tabele z kolumnami tożsamości, @@ IDENTITY zwraca wartość NULL.Jeśli dodaje się wiele wierszy, generowanie wielu wartości tożsamości @@ IDENTITY Zwraca ostatnią wartość tożsamości generowane.instrukcja fires jednego lub kilku wyzwalaczy, wykonujących wstawia, które generują wartości tożsamości, wywołujący @@ IDENTITY natychmiast po instrukcja zwraca, ostatnia wartość tożsamości generowanych przez wyzwalacze.Jeśli wyzwalacz jest uruchamiany po Wstaw akcja na tabela zawierającej kolumnai wyzwalacz wstawia do innej tabela , który nie ma kolumna, @@ IDENTITY zwraca wartość tożsamości pierwsze wstawienie.Wartość @@ IDENTITY nie powraca do poprzedniego ustawienia INSERT lub SELECT INTO instrukcja lub kopiowanie masowe nie powiedzie się lub wycofać transakcji.

Sprawozdania nie powiodło się i transakcje można zmienić bieżącej tożsamości dla tabela i utworzenie przerwy w tożsamości wartości w kolumna .Wartość tożsamości jest nigdy przywracane pomimo tego transakcja, która próba wstawienia wartości do tabela nie jest zatwierdzona.Na przykład jeśli INSERT instrukcja nie powiedzie się z powodu przekroczenia IGNORE_DUP_KEY, nadal jest zwiększany bieżącą wartość tożsamości dla tabela .

@@ IDENTITY, SCOPE_IDENTITY i IDENT_CURRENT są podobne funkcje, ponieważ wszystkie one zwrócić wartość ostatni wstawiony do identyfikacji kolumna tabela.

@@ IDENTITY i SCOPE_IDENTITY zwracają ostatnia wartość tożsamości generowane w dowolnej tabela w bieżącej sesja.Jednak SCOPE_IDENTITY zwraca wartość tylko w obrębie bieżącego zakres; @@ IDENTITY nie jest ograniczony do określonego zakres.

IDENT_CURRENT nie jest ograniczone przez zakres i sesja; jest ograniczone do określonej tabela.IDENT_CURRENT zwraca wartość tożsamości generowane dla określonej tabela w sesja i dowolnego zakres.Aby uzyskać więcej informacji, zobacz IDENT_CURRENT (Transact-SQL).

zakres funkcja @@ IDENTITY jest bieżącej sesja na serwerze lokalnym, na którym jest wykonywane.Ta funkcja nie można zastosować do serwerów zdalnych lub połączone.Aby uzyskać wartość tożsamości, na innym serwerze, wykonać procedura składowana w tym zdalnego lub serwer połączony i nie tej procedura składowana (który jest wykonywany w kontekście zdalnego lub serwer połączony) zebrać wartość tożsamości i powrócić do wywoływania połączeń na serwerze lokalnym.

Replikacja może wpłynąć na wartość @@ IDENTITY, ponieważ jest on używany w ramach procedury przechowywane i wyzwalacze replikacja .@@ IDENTITY nie jest wiarygodnym wskaźnikiem najnowsze tożsamości utworzonych przez użytkownika, jeśli kolumna jest częścią replikacja artykuł.Składnia funkcja SCOPE_IDENTITY() można użyć zamiast @@ IDENTITY.Aby uzyskać więcej informacji, zobacz SCOPE_IDENTITY (Transact-SQL).

Ostrzeżenie

Wywołanie procedura składowana lub Transact-SQL instrukcja należy ponownie zapisać, aby użyć funkcja SCOPE_IDENTITY(), która zwróci najnowsze tożsamość użyta w zakres instrukcjaużytkownika i nie tożsamości w zakres zagnieżdżonych wyzwalacza, używanych przez replikacja.

Przykłady

Poniższy przykład wstawia wiersz do tabela z kolumna (LocationID) i korzysta z @@IDENTITY do wyświetlania wartości tożsamości w nowym wierszu.

USE AdventureWorks2008R2;
GO
--Display the value of LocationID in the last row in the table.
SELECT MAX(LocationID) FROM Production.Location;
GO
INSERT INTO Production.Location (Name, CostRate, Availability, ModifiedDate)
VALUES ('Damaged Goods', 5, 2.5, GETDATE());
GO
SELECT @@IDENTITY AS 'Identity';
GO
--Display the value of LocationID of the newly inserted row.
SELECT MAX(LocationID) FROM Production.Location;
GO