Birisi T-Sql kullanırken @@Identity
'u nasıl iade edebilirim biliyor mu? BöyleT-Sql @@ Kimlik
şey: Bunun gibi
set @Sql = "insert into table....values()..."
exec @sql
return @@Identity
Birisi T-Sql kullanırken @@Identity
'u nasıl iade edebilirim biliyor mu? BöyleT-Sql @@ Kimlik
şey: Bunun gibi
set @Sql = "insert into table....values()..."
exec @sql
return @@Identity
INSERT INTO TableName (Field1, Field2, Field3) VALUES (1, 2, 3);
SELECT SCOPE_IDENTITY();
Bu, çok bildirimli bir toplu iş olduğundan, her istemci kitaplığının değerlerini aynı şekilde döndüreceğinden emin değilim; Örneğin klasik ADO'da, değeri okuyabilmeniz için bir sonraki kayıt kümesine ilerlemeniz gerekebilir. Ancak, ADO.NET kullanıyorsanız, yukarıdaki tüm dizgede ExecuteScalar'u kullanabileceğinizi ve SCOPE_IDENTITY
değerinizi iyi paraya dönüştürebileceğinizi biliyorum.
Dikkat: ADO.NET değeri beklediğiniz gibi int
değil, decimal
olarak döndürecektir. Bunun nedeni, SCOPE_IDENTITY
nedenlerinden dolayı numeric(38,0)
olarak yazılmıştır. Bu nedenle ya int
'a atmadan önce decimal
'a ExecuteScalar sonucunu vermeniz ya da SELECT CAST(SCOPE_IDENTITY() AS INT)
(IDENTITY alanınızın bir INT olduğu varsayılarak, daha büyük sayısal bir tür değil) gerekir.
Greate. Teşekkürler. –
Ben ** her zaman SCIPE_IDENTITY yerine @ IDENTITY kullanıyorum –
'SCOPE_IDENTITY' hakkında bile bilmiyordum, ama haklısınız gibi görünüyor. Bir kaç dakikalık gözden geçirme işleminden, '@ IDENTITY' hatalarını yapmak için bazı egzotik durumları (diğer tablolara daha fazla INSERT yapan INSERT tetikleyicileri gibi) alır; ama yine de haklısınız, 'SCOPE_IDENTITY' Doğru Şey. Cevabımı güncelledim. –
:
INSERT INTO Table(...)
OUTPUT INSERTED.IdColumn
VALUES(...)
bu t-sql'de çalışacak mı? exec kullanırken sql? –
Bu, 2008 ve sonrasında çalışacaktır. Ve bunun güzelliği, eğer ihtiyaç duyduğunuzda başka alanları da tekrarlayabilirsiniz. – HLGEM
Ekleme "; @@ kimliğini seçin" ekinizin açıklamaya:
insert into tab (x,y,z) values (a,b,c); select @@identity
döndü değerdir ID (kullanma ExecuteScalar)
Lütfen satırları bir kimlik sütunuyla başka bir tabloya ekleyen bir ek tetikleyiciniz varsa @@ kimliğinin yanlış sonuç vereceğini unutmayın. Ken'in önerdiği gibi SCOPE_IDENTITY kullanmak daha güvenli ve geleceğe daha dayanıklı. Bkz. Http://msdn.microsoft.com/tr-tr/kütüphane/ms190315.aspx. – EventHorizon
Bu, örtük gereksinimlerinizden birinin dinamik SQL'in çalıştırılmasıdır. Bunun karşı tavsiye ediyorum da, bunun senle aradığınızı başarabilirsiniz:
set @Sql = 'insert into table....values()...; select SCOPE_IDENTITY()'
exec(@Sql)
Sen Id
Kimlik alandır bu
Insert into Table(Col2, Col3)
output inserted.Id
values ('xyz', 'abc')
kullanabilirsiniz
öyle mi ne ortalama getiri @@ Kimlik? Nereden? Ve aslında @@ Kimlik veya scope_identity'ye ihtiyacınız var mı? –
Tam @@ kimliğine ihtiyacım var. –
@user - Eğer orijinal tablodaki bir tetikleyici, bir kimlik sütunu ile başka bir tabloya eklerse, o ikinci tablo için kimliğe ihtiyacınız var mı? –