Aracılığıyla paylaş


SCOPE_IDENTITY (Transact-SQL)

Aynı kimlik sütun eklenen son Kimlik deerini döndürür kapsam.Kapsam, bir modül yer: bir saklı yordam, tetikleyici, işlev veya toplu iş iş. Bu nedenle, aynı saklı yordam, işlev veya toplu iş iş ise iki deyim aynı kapsam içinde olan.

Topic link iconTransact-SQL sözdizimi kuralları

SCOPE_IDENTITY()

Dönüş Türleri

numeric(38,0)

Remarks

Çünkü, kimlik sütunlarının eklenen değerleri geri SCOPE_IDENTITY, IDENT_CURRENT ve @@ IDENTITY benzer işlevlerdir.

Kapsam ve oturum IDENT_CURRENT sınırlıdır; belirli bir tabloya sınırlıdır.IDENT_CURRENT herhangi belirli bir tablo için oluşturulan değer döndüren oturum ve herhangi bir kapsam.Daha fazla bilgi için bkz: Ident_current (Transact-SQL).

SCOPE_IDENTITY ve @@ IDENTITY verir oluşturulan son kimlik değerlerini tablo geçerli oturumda.Ancak, yalnızca geçerli kapsam içinde eklenen değerleri SCOPE_IDENTITY verir; @@ IDENTITY belirli bir kapsam için sınırlı değildir.

Örneğin, T1 ve T2, iki tablo vardır ve bir INSERT tetikleyicisi T1 üzerinde tanımlanır.T1 için bir satır eklenir, tetikleyici harekete ve T2'de bir satır ekler.Bu senaryo iki kapsamlarını gösterir: T1, ekleme ve T2 üzerinde ekleme tetiği. olarak

Kimlik sütunlarının her ikisi de T1 ve T2 olması varsayılarak, @@ IDENTITY ve SCOPE_IDENTITY T1 üzerinde INSERT deyim sonunda farklı değerler döndürür.@@ IDENTITY son kimlik sütun değerini bir kapsam içinde geçerli oturumda eklenen döndürür.Bu T2 eklenen değerdir.SCOPE_IDENTITY() T1 eklenen kimlik değerini döndürür.Bu, aynı kapsam içinde gerçekleşen son ekleme oldu.Kapsamda herhangi bir kimlik sütun olarak INSERT deyimleri gerçekleşmeden önce işlev çağrıldığında, SCOPE_IDENTITY() işlevi null değerini döndürür.

Başarısız ifadeleri ve hareketleri, bir tablo için geçerli kimlik değiştirebilir ve boşluklar kimlik sütun değerleri oluşturun.Kimlik değerini geri hareket, değer olarak girmek istediniz ancak hiçbir zaman alınır tablo önem vermektedir.Örneğin, bir INSERT deyim IGNORE_DUP_KEY ihlali nedeniyle başarısız olursa, tablo için geçerli kimlik değeri hala artırılır.

Örnekler

C.@@ IDENTITY SCOPE_IDENTITY sahip tetikleyiciler ile

Aşağıdaki örnek, iki tablo oluştururTZveTYve bir INSERT tetikleyicisi,TZ.Bir satır eklendiğinde, tabloTZ, tetikleyici ( Ztrig) çalıştığını ve bir satırın eklerTY.

USE tempdb
GO
CREATE TABLE TZ (
   Z_id  int IDENTITY(1,1)PRIMARY KEY,
   Z_name varchar(20) NOT NULL)

INSERT TZ
   VALUES ('Lisa')
INSERT TZ
   VALUES ('Mike')
INSERT TZ
   VALUES ('Carla')

SELECT * FROM TZ

--Result set: This is how table TZ looks.
Z_id   Z_name
-------------
1      Lisa
2      Mike
3      Carla

CREATE TABLE TY (
   Y_id  int IDENTITY(100,5)PRIMARY KEY,
   Y_name varchar(20) NULL)

INSERT TY (Y_name)
   VALUES ('boathouse')
INSERT TY (Y_name)
   VALUES ('rocks')
INSERT TY (Y_name)
   VALUES ('elevator')

SELECT * FROM TY
--Result set: This is how TY looks:
Y_id  Y_name
---------------
100   boathouse
105   rocks
110   elevator

/*Create the trigger that inserts a row in table TY 
when a row is inserted in table TZ*/
CREATE TRIGGER Ztrig
ON TZ
FOR INSERT AS 
   BEGIN
   INSERT TY VALUES ('')
   END

/*FIRE the trigger and determine what identity values you obtain 
with the @@IDENTITY and SCOPE_IDENTITY functions.*/
INSERT TZ VALUES ('Rosalie')

SELECT SCOPE_IDENTITY() AS [SCOPE_IDENTITY]
GO
SELECT @@IDENTITY AS [@@IDENTITY]
GO

Here is the result set.

SCOPE_IDENTITY
4
/*SCOPE_IDENTITY returned the last identity value in the same scope. This was the insert on table TZ.*/

@@IDENTITY
115
/*@@IDENTITY returned the last identity value inserted to TY by the trigger. This fired because of an earlier insert on TZ.*/

b.@@ IDENTITY ve SCOPE_IDENTITY() ile çoğaltma

Aşağıdaki örnekler @@ IDENTITY ve SCOPE_IDENTITY() birleştirme kopyalama için yayımlanan bir veritabanındaki ekler için nasıl kullanılacağını gösterir.Örneklerin her iki tabloda bulunanAdventureWorksÖrnek Veritabanı: Person.ContactTypeyayımlandığında, veSales.Customeryayımlanan.Birleştirme çoğaltma Tetikleyiciler yayımlanan tablolara ekler.Bu nedenle,@@IDENTITYdeğeri bir çoğaltma sisteminde ekleme dönebilirsiniz tablo kullanıcı içine ekleme yerine tablo.

The Person.ContactType table has a maximum identity value of 20.İçine bir satır eklerseniz, tablo,@@IDENTITYveSCOPE_IDENTITY()dönüş aynı değeri.

USE AdventureWorks;
GO
INSERT INTO Person.ContactType ([Name]) VALUES ('Assistant to the Manager')
GO
SELECT SCOPE_IDENTITY() AS [SCOPE_IDENTITY]
GO
SELECT @@IDENTITY AS [@@IDENTITY]
GO

Here is the result set.

SCOPE_IDENTITY
21

@@IDENTITY
21

The Sales.Customer table has a maximum identity value of 29483.If you insert a row into the table, @@IDENTITY and SCOPE_IDENTITY() return different values.SCOPE_IDENTITY() returns the value from the insert into the user table, whereas @@IDENTITY returns the value from the insert into the replication system table.KullanımıSCOPE_IDENTITY()eklenen kimlik değeri. erişim gerektiren uygulamalar için

INSERT INTO Sales.Customer ([TerritoryID],[CustomerType]) VALUES (8,'S')
GO
SELECT SCOPE_IDENTITY() AS [SCOPE_IDENTITY]
GO
SELECT @@IDENTITY AS [@@IDENTITY]
GO

Here is the result set.

SCOPE_IDENTITY
29484

@@IDENTITY
89

See Also

Reference