Aracılığıyla paylaş


@@IDENTITY (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiMicrosoft Fabric'te SQL veritabanı

@@IDENTITY son eklenen kimlik değerini döndüren bir sistem fonksiyonudur.

Transact-SQL söz dizimi kuralları

Sözdizimi

@@IDENTITY  

Dönüş türleri

numeric(38,0)

Açıklamalar

Bir INSERT, SELECT INTO, veya toplu kopyalama ifadesi tamamlandıktan sonra, @@IDENTITY ifadenin oluşturduğu son kimlik değerini içerir.

  • Eğer ifade kimlik sütunlu tabloları etkilemiyorsa, @@IDENTITY döner NULL.
  • Birden fazla satır eklendiğinde ve birden fazla kimlik değeri üretilirse, @@IDENTITY oluşturulan son kimlik değeri döner.
  • Eğer ifade bir veya birden fazla tetikleyiciyi tetiklerse, özdeşlik değerleri üreten eklemeleri gerçekleştirirse, hemen ardından çağrı @@IDENTITY tetikleyiciler tarafından üretilen son kimlik değerini döndürür.
  • Eğer bir tetikleyici, bir kimlik sütunu olan bir tabloda bir ekleme eyleminden sonra tetiklenirse ve tetikleyici kimlik sütunu olmayan başka bir tabloya eklenirse, @@IDENTITY ilk eklemenin kimlik değerini döndürür. Eğer INSERT or SELECT INTO ifadesi veya toplu kopya başarısız olursa veya işlem geri alınırsa değer @@IDENTITY önceki bir ayara geri dönmez.

Başarısız ifadeler ve işlemler, bir tablonun mevcut kimliğini değiştirebilir ve kimlik sütunu değerlerinde boşluklar yaratabilir. Kimlik değeri, değeri tabloya eklemeye çalışan işlem belirlenmemiş olsa bile asla geri alınmaz. Örneğin, bir INSERT ifadesi bir ihlal nedeniyle IGNORE_DUP_KEY başarısız olursa, tablonun mevcut kimlik değeri hâlâ artırılır.

@@IDENTITY, SCOPE_IDENTITY, ve IDENT_CURRENT benzer fonksiyonlardır çünkü hepsi tablonun sütununa eklenen IDENTITY son değeri döndürür.

  • @@IDENTITY ve SCOPE_IDENTITY mevcut oturumdaki herhangi bir tabloda oluşturulan son kimlik değerini döndürür. Ancak, SCOPE_IDENTITY değeri yalnızca mevcut kapsam içinde döndürür; @@IDENTITY belirli bir kapsamla sınırlı değildir.

  • IDENT_CURRENT kapsam ve oturumla sınırlı değildir; belirli bir tabloyla sınırlıdır. IDENT_CURRENT herhangi bir oturumda ve herhangi bir kapsamda belirli bir tablo için oluşturulan kimlik değerini döndürür. Daha fazla bilgi için bkz. IDENT_CURRENT (Transact-SQL).

Fonksiyonun @@IDENTITY kapsamı, yürütüldiği yerel sunucudaki güncel oturumdur. Bu fonksiyon uzak veya bağlı sunuculara uygulanamaz. Farklı bir sunucuda bir kimlik değeri elde etmek için, o uzak veya bağlı sunucuda depolanmış bir prosedür çalıştırın ve o saklanan prosedür (uzak veya bağlı sunucu bağlamında yürütülüyor) kimlik değerini toplayarak yerel sunucudaki çağrı bağlantısına geri gönderin.

Çoğaltma @@IDENTITY , değeri etkileyebilir, çünkü bu değer replikasyon tetikleyicileri ve depolanan prosedürler içinde kullanılır. @@IDENTITY sütun bir çoğaltma makalesinin parçasıysa, en son kullanıcı tarafından oluşturulan kimliğin güvenilir bir göstergesi değildir. SCOPE_IDENTITY() Fonksiyon sözdizimi yerine @@IDENTITYkullanabilirsiniz. Daha fazla bilgi için bkz. SCOPE_IDENTITY (Transact-SQL)

Uyarı

Çağrılan depolanmış prosedür veya Transact-SQL ifadesi, o kullanıcı ifadesi kapsamında kullanılan en son kimliği döndüren fonksiyonu kullanacak şekilde yeniden yazılmalıdır SCOPE_IDENTITY() ; bu da çoğaltma ile kullanılan iç içe tetikleyicinin kapsamındaki kimliği değil.

Örnekler

Aşağıdaki örnek, bir kimlik sütunuylaLocationID () bir satır ekler ve yeni satırda kullanılan kimlik değerini göstermek için kullanılır @@IDENTITY .

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