Tabloya yeni bir kayıt eklediğinizde yeni oluşturulan kimliği almak istiyorum.
Şunu okudum: http://msdn.microsoft.com/en-us/library/ms177564.aspx ancak geçici tablo oluşturması gerekiyor.
INSERT deyimini yürüttükten sonra ID'yi döndürmek istiyorum (sadece bir INSERT yürüttüğümü varsayarak).
Örnek:
1 Joe Joe
2 Michael Mike
3 Zoe Zoe
Bir INSERT deyimini çalıştırırken, oluşturulan kimliği döndürmek istiyorum, yani 4.
SQL deyimi kullanarak bunu nasıl yapacağımı söyleyebilir misiniz yoksa bu mümkün değil mi?
SQL Server tablonuzda INT IDENTITY
(veya BIGINT IDENTITY
) türünde bir sütun varsa, en son eklenen değeri kullanarak alabilirsiniz:
INSERT INTO dbo.YourTable(columns....)
VALUES(..........)
SELECT SCOPE_IDENTITY()
Bu, başka bir satır eklemediğiniz sürece çalışır - sadece burada bu kapsamda verilen son IDENTITY
değerini döndürür.
En az iki seçenek daha vardır - @@IDENTITY
ve IDENT_CURRENT
- nasıl çalıştıkları ve ne şekilde farklı oldukları (ve size beklenmedik sonuçlar verebilecekleri) hakkında daha fazla bilgiyi bu Pinal Dave'in mükemmel blog yazısı adresinde bulabilirsiniz.
Basit bir tablo varsayalım:
CREATE TABLE dbo.foo(ID INT IDENTITY(1,1), name SYSNAME);
Daha fazla kullanım için IDENTITY
değerlerini bir tablo değişkeninde yakalayabiliriz.
DECLARE @IDs TABLE(ID INT);
-- minor change to INSERT statement; add an OUTPUT clause:
INSERT dbo.foo(name)
OUTPUT inserted.ID INTO @IDs(ID)
SELECT N'Fred'
UNION ALL
SELECT N'Bob';
SELECT ID FROM @IDs;
Bu yöntemin güzel yanı (a) çok satırlı ekleme işlemlerini gerçekleştirmesi (SCOPE_IDENTITY()
yalnızca son değeri döndürür) ve (b) yanlış sonuçlara yol açabilen, ancak şimdiye kadar yalnızca SQL Server 2008 R2 SP1 CU5'te düzeltilen bu paralellik hatasını önlemesidir.
Kullanabilirsin:
SELECT IDENT_CURRENT(‘tablename’)
Belirli bir tablo için en son kimliğe erişmek için.
Örneğin, aşağıdaki kodu göz önünde bulundurarak:
INSERT INTO dbo.MyTable(columns....) VALUES(..........)
INSERT INTO dbo.YourTable(columns....) VALUES(..........)
SELECT IDENT_CURRENT(‘MyTable’)
SELECT IDENT_CURRENT(‘YourTable’)
Bu, ilgili tablolar için doğru değeri verecektir.
Değeri oluşturan bağlantıdan ve değeri üreten deyimin kapsamından bağımsız olarak, bir tabloda üretilen son IDENTITY
değerini döndürür.
IDENT_CURRENTkapsam ve oturumla sınırlı değildir; belirtilen 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.