@@ IDENTITY (Transact-sql)
Son Eklenen kimlik değerini döndüren bir sistem işlevidir.
Transact-SQL Sözdizim Kuralları
Sözdizimi
@@IDENTITY
Dönüş Türleri
numeric(38,0)
Açıklamalar
Bir INSERT, select INTO veya toplu kopya deyimi tamamlandıktan sonra @@ IDENTITY deyimi tarafından oluşturulan son kimlik değeri içerir. Deyimi herhangi bir tablo ile kimlik sütunlarının etkilemez, @@ IDENTITY null döndürür. Birden çok satır eklediyseniz, birden çok kimlik değerleri, üreten @@ IDENTITY oluşturulan son kimlik değeri döndürür. Deyim kimlik değerleri ekler gerçekleştiren bir veya daha fazla tetikleyicileri harekete çağıran @@ IDENTITY hemen sonra deyimi Tetikleyiciler tarafından oluşturulan son kimlik değeri döndürür. Tetikleyici sonra kimlik sütunu olan bir tablo Insert eylemi tetiklenir ve tetikleyici kimlik sütunu olmayan başka bir tabloya ekler, @@ IDENTITY ilk Insert kimlik değerini döndürür. @@ IDENTITY değeri bir önceki Ekle veya select INTO deyimi veya toplu kopya başarısız olursa ya da hareket geri alınırsa ayarı geri değil.
Hata döndüren deyimler ve işlemler bir tablonun geçerli kimliğini değiştirebilir ve kimlik sütunu değerlerinde boşluklar oluşturabilir. Kimlik değerini tabloya eklemeye çalışan işlem yürütülmemiş olsa bile kimlik değeri hiçbir zaman geri alınmaz. Örneğin, bir INSERT deyimi bir IGNORE_DUP_KEY ihlali nedeniyle hata verirse, tablonun geçerli kimlik değeri yine de artırılır.
@@ IDENTITY, SCOPE_IDENTITY ve IDENT_CURRENT benzer işlevleri olduklarından hepsi bir tablonun kimlik sütunu eklenen son değerini döndürür.
@@ IDENTITY ve SCOPE_IDENTITY herhangi bir tabloyu geçerli oturumda oluşturulan son kimlik değeri döndürür. Ancak, SCOPE_IDENTITY yalnızca geçerli kapsam içinde değerini döndürür; @@ IDENTITY, belirli bir kapsam için sınırlı değildir.
IDENT_CURRENT kapsam veya oturumla sınırlı değildir; belirli bir tablo ile sınırlıdır. IDENT_CURRENT herhangi bir oturumu ve herhangi bir kapsam içinde belirli bir tablo için oluşturulan kimlik değerini döndürür. Daha fazla bilgi için, bkz. IDENT_CURRENT (Transact-sql).
@@ IDENTITY işlevi üzerinde yürütüldüğü yerel sunucuda geçerli oturum kapsamıdır. Bu işlev, uzak ya da bağlantılı sunucular için uygulanamaz. Farklı bir sunucudaki bir kimlik değeri elde etmek için o uzak bir saklı yordamı yürütmek veya bağlantılı sunucu ve saklı yordam (ki uzak veya bağlantılı sunucu bağlamında yürütülen) sahip kimlik değeri toplamak ve arama bağlantısı yerel sunucuda geri.
Çoğaltma çoğaltma Tetikleyicileri ve saklı yordamlar içinde kullanılır çünkü @@ IDENTITY değer etkileyebilir. @@ IDENTITY sütunu bir çoğaltma makale bir parçasıysa, en son kullanıcı tarafından oluşturulan kimlik güvenilir bir gösterge değil. @@ IDENTITY yerine SCOPE_IDENTITY() işlevinin sözdizimi kullanabilirsiniz. Daha fazla bilgi için bkz.SCOPE_IDENTITY (Transact-SQL)
[!NOT]
Arayan saklı yordamı veya Transact-SQLdeyimi yeniden, kullanıcı beyanı kapsamında kullanılan en son kimlik ve kimlik çoğaltma tarafından kullanılan iç içe geçmiş tetikleyici kapsamında değil dönecektir SCOPE_IDENTITY() işlevini kullanmak için.
Örnekler
Aşağıdaki örnek, kimlik sütunu olan bir tabloya bir satır ekler (LocationID) ve @@IDENTITYyeni bir satırda kullanılan kimlik değerini görüntülemek için.
USE AdventureWorks2012;
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
USE AdventureWorks2012;
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