IDENT_CURRENT (Transact-SQL)

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

Sistem fonksiyonu, IDENT_CURRENT belirli bir tablo veya görünüm için oluşturulan son kimlik değerini döndürür. Üretilen son kimlik değeri herhangi bir oturum ve herhangi bir kapsam için olabilir.

Transact-SQL söz dizimi kuralları

Sözdizimi

IDENT_CURRENT( 'table_or_view' )

Arguments

table_or_view

Kimlik değeri geri dönen tablo veya görünümün adı. table_or_viewvarchar'dır, varsayılan yoktur.

Dönüş türleri

numeric(@@MAXPRECISION,0))

Exceptions

Hata durumunda veya çağıranın nesneyi görüntüleme izni yoksa döndürür NULL .

SQL Server'da bir kullanıcı yalnızca kullanıcının sahip olduğu veya kullanıcıya izin verilen güvenli hale getirilebilir öğeler meta verilerini görüntüleyebilir. Bu, meta veri yayan, yerleşik fonksiyonların IDENT_CURRENT , örneğin kullanıcının nesne üzerinde herhangi bir izni yoksa geri NULL dönebileceği anlamına gelir. Daha fazla bilgi için bkz. meta veri görünürlüğü yapılandırması .

Açıklamalar

IDENT_CURRENTSQL Server 2000 (8.x) kimlik fonksiyonlarına SCOPE_IDENTITY benzer ve @@IDENTITY. Üç fonksiyonun tamamı da son oluşturulan kimlik değerlerini döndürür. Ancak, bu fonksiyonların her birinde sonuncunun tanımlandığı kapsam ve oturum farklılık gösterir:

  • IDENT_CURRENT herhangi bir oturumda ve herhangi bir kapsamda belirli bir tablo için oluşturulan son kimlik değerini döndürür.
  • @@IDENTITY mevcut oturumdaki herhangi bir tablo için tüm kapsamlarda oluşturulan son kimlik değerini döndürür.
  • SCOPE_IDENTITY mevcut oturumdaki herhangi bir tablo ve mevcut kapsam için oluşturulan son kimlik değerini döndürür.

Değer IDENT_CURRENT olduğunda NULL (çünkü tablo hiç satır içermemiş veya kısaltılmış), IDENT_CURRENT fonksiyon tohum değerini döndürür.

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 deyimi ihlal IGNORE_DUP_KEY nedeniyle başarısız olursa, tablonun geçerli kimlik değeri yine de artırılır.

Birleştirmeler içeren bir görünümde kullanıldığında IDENT_CURRENT , NULL geri döner. Bu, sadece bir veya birden fazla birleşik tablonun Identity sütununa sahip olup olmamasından bağımsızdır.

Önemli

Bir sonraki oluşturulan kimlik değerini tahmin ederken dikkatli IDENT_CURRENT olun. Gerçek oluşturulan değer, diğer oturumlar tarafından yapılan eklemeler nedeniyle plus'tan IDENT_CURRENTIDENT_INCR farklı olabilir.

Fonksiyon, IDENT_CURRENTFabric Data Warehouse'daki kimlik sütunları için kullanılabilir değildir.

Örnekler

A. Belirlenmiş bir tablo için oluşturulan son kimlik değerini döndür

Aşağıdaki örnek, veritabanında tablo Person.Address için oluşturulan AdventureWorks2025 son kimlik değerini döndürür.

USE AdventureWorks2022;  
GO  
SELECT IDENT_CURRENT ('Person.Address') AS Current_Identity;  
GO  

B. IDENT_CURRENT, @@IDENTITY ve SCOPE_IDENTITY tarafından döndürülen kimlik değerlerini karşılaştırın

Aşağıdaki örnek, , IDENT_CURRENT, ve @@IDENTITYile SCOPE_IDENTITYdöndürülen farklı kimlik değerlerini gösterir.

USE AdventureWorks2022;  
GO  
IF OBJECT_ID(N't6', N'U') IS NOT NULL   
    DROP TABLE t6;  
GO  
IF OBJECT_ID(N't7', N'U') IS NOT NULL   
    DROP TABLE t7;  
GO  
CREATE TABLE t6(id INT IDENTITY);  
CREATE TABLE t7(id INT IDENTITY(100,1));  
GO  
CREATE TRIGGER t6ins ON t6 FOR INSERT   
AS  
BEGIN  
   INSERT t7 DEFAULT VALUES  
END;  
GO  
--End of trigger definition  

SELECT id FROM t6;  
--IDs empty.  

SELECT id FROM t7;  
--ID is empty.  

--Do the following in Session 1  
INSERT t6 DEFAULT VALUES;  
SELECT @@IDENTITY;  
/*Returns the value 100. This was inserted by the trigger.*/  

SELECT SCOPE_IDENTITY();  
/* Returns the value 1. This was inserted by the   
INSERT statement two statements before this query.*/  

SELECT IDENT_CURRENT('t7');  
/* Returns value inserted into t7, that is in the trigger.*/  

SELECT IDENT_CURRENT('t6');  
/* Returns value inserted into t6. This was the INSERT statement four statements before this query.*/  

-- Do the following in Session 2.  
SELECT @@IDENTITY;  
/* Returns NULL because there has been no INSERT action   
up to this point in this session.*/  

SELECT SCOPE_IDENTITY();  
/* Returns NULL because there has been no INSERT action   
up to this point in this scope in this session.*/  

SELECT IDENT_CURRENT('t7');  
/* Returns the last value inserted into t7.*/