Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Baza danych SQL w usłudze Microsoft Fabric
@@IDENTITY jest funkcją systemową, która zwraca ostatnią wartość identyczności.
Transact-SQL konwencje składni
Składnia
@@IDENTITY
Typy zwracane
numeryczne(38,0)
Uwagi
Po INSERTzakończeniu , SELECT INTO, lub instrukcji masowej kopii, zawiera @@IDENTITY ostatnią wartość tożsamości generowaną przez to zdanie.
- Jeśli zdanie nie wpływa na żadne tabele z kolumnami tożsamości,
@@IDENTITYzwracaNULL. - Jeśli wstawi się wiele wierszy, generując wiele wartości
@@IDENTITYtożsamości, zwraca się ostatnia wygenerowana wartość tożsamości. - Jeśli instrukcja wywoła jeden lub więcej wyzwalaczy, które wykonują wstawiania generujące wartości tożsamości, wywołanie
@@IDENTITYnatychmiast po instrukcji zwraca ostatnią wartość tożsamości wygenerowaną przez wyzwalacze. - Jeśli wyzwalacz zostanie wywołany po akcji wstawienia w tabeli zawierającej kolumnę tożsamości, a wyzwalacz wstawi się do innej tabeli, która nie ma kolumny tożsamości,
@@IDENTITYzwraca wartość tożsamości z pierwszego wstawienia. Wartość@@IDENTITYnie wraca do poprzedniego ustawienia, jeśliINSERTinstrukcja orSELECT INTOlub kopia zbiorcza nie ulegnie, albo jeśli transakcja zostanie cofnięta.
Nieudane wyciągi i transakcje mogą zmienić aktualną tożsamość tabeli i stworzyć luki w wartościach kolumn tożsamości. Wartość tożsamości nigdy nie jest cofana, nawet jeśli transakcja, która próbowała wprowadzić wartość do tabeli, nie została zatwierdzona. Na przykład, jeśli instrukcja INSERT nie zadziała z powodu IGNORE_DUP_KEY naruszenia, aktualna wartość tożsamości tabeli nadal jest zwiększona.
@@IDENTITY, SCOPE_IDENTITY, oraz IDENT_CURRENT są podobnymi funkcjami, ponieważ wszystkie zwracają ostatnią wartość wstawioną IDENTITY do kolumny tabeli.
@@IDENTITYorazSCOPE_IDENTITYzwróć ostatnią wartość tożsamości wygenerowaną w dowolnej tabeli w bieżącej sesji. Jednak zwracaSCOPE_IDENTITYwartość tylko w obrębie bieżącego zakresu;@@IDENTITYnie jest ograniczony do konkretnego zakresu.IDENT_CURRENTnie jest ograniczony zakresem i sesją; jest ograniczony do określonej tabeli.IDENT_CURRENTzwraca wartość tożsamości wygenerowaną dla konkretnej tabeli w dowolnej sesji i zakresie. Więcej informacji można znaleźć w IDENT_CURRENT (Transact-SQL).
Zakres @@IDENTITY funkcji to bieżąca sesja na lokalnym serwerze, na którym jest wykonywana. Funkcja ta nie może być stosowana do serwerów zdalnych ani połączonych. Aby uzyskać wartość tożsamości na innym serwerze, wykonaj procedurę przechowywaną na tym zdalnym lub połączonym serwerze i ta procedura przechowywana (działająca w kontekście zdalnego lub połączonego serwera) zebrała wartość tożsamości i zwróciła ją do wywołującego połączenia na lokalnym serwerze.
Replikacja może wpływać na wartość @@IDENTITY , ponieważ jest używana w wyzwalaczach replikacji i procedurach przechowywanych.
@@IDENTITY nie jest wiarygodnym wskaźnikiem najnowszej tożsamości stworzonej przez użytkownika, jeśli kolumna jest częścią artykułu replikacyjnego. Możesz użyć składni SCOPE_IDENTITY() funkcji zamiast .@@IDENTITY Więcej informacji można znaleźć w SCOPE_IDENTITY (Transact-SQL)
Uwaga / Notatka
Wywołująca procedura przechowywana lub Transact-SQL polecenie musi zostać przepisane, aby używać funkcji SCOPE_IDENTITY() , która zwraca najnowszą tożsamość użytą w zakresie danego polecenia użytkownika, a nie tożsamość w zakresie zagnieżdżonego wyzwalacza używanego przez replikację.
Przykłady
Poniższy przykład wstawia wiersz do tabeli z kolumną identyczną (LocationID) i używa go @@IDENTITY do wyświetlania wartości tożsamości użytej w nowym wierszu.
USE AdventureWorks2022;
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