Yaptığım Son Kaydın PK Alanını Alma
Yaptığım Son Kaydın PK Alanını Alma
Merhaba Arkadaşlar,
SQL Server 2008 Kullanmaktayım. Şöyle bir sorunum var : Form ekranında kayıt yaptıktan sonra işlemlere devam edeceğim. Bunun için de Master tabloda önce kaydı oluşturup PK alanını alıp, detail tablolarla ilişkili kayıtlar oluşturacağım. Sistem ağ üzerinde çalışacağından yapılan son kayıtın id si benim id im olmayabilir. MySQL de mysql_insert_id bu işi görüyordu ama SQL Server da karşılığını bulamadım.
İyi çalışmalar.
SQL Server 2008 Kullanmaktayım. Şöyle bir sorunum var : Form ekranında kayıt yaptıktan sonra işlemlere devam edeceğim. Bunun için de Master tabloda önce kaydı oluşturup PK alanını alıp, detail tablolarla ilişkili kayıtlar oluşturacağım. Sistem ağ üzerinde çalışacağından yapılan son kayıtın id si benim id im olmayabilir. MySQL de mysql_insert_id bu işi görüyordu ama SQL Server da karşılığını bulamadım.
İyi çalışmalar.
Re: Yaptığım Son Kaydın PK Alanını Alma
s.a.
insert komutunun hemen akabinde
select @@identity komutu ile son eklenen kaydın id sini alabilirsiniz.
kolay gelsin.
insert komutunun hemen akabinde
select @@identity komutu ile son eklenen kaydın id sini alabilirsiniz.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Re: Yaptığım Son Kaydın PK Alanını Alma
A.S.
İnsertin hemen arkasından çalıştırıyorum, fakat farklı bir query ile çalıştırmamın sakıncası olur mu? Program network üzerinde olacağından son kayıt benim kaydım olabilir. Benim isteğim benim eklediğim son kayıt olduğu için ayrı query lerde güvenirliği nedir acaba bu işlevin?
İnsertin hemen arkasından çalıştırıyorum, fakat farklı bir query ile çalıştırmamın sakıncası olur mu? Program network üzerinde olacağından son kayıt benim kaydım olabilir. Benim isteğim benim eklediğim son kayıt olduğu için ayrı query lerde güvenirliği nedir acaba bu işlevin?
- sabanakman
- Kıdemli Üye
- Mesajlar: 3077
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
Re: Yaptığım Son Kaydın PK Alanını Alma
Kod: Tümünü seç
ADO.Append;
ADO.Post;
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .
Re: Yaptığım Son Kaydın PK Alanını Alma
s.a.
bir başka yöntemde insert ettiğiniz kaydı select etmeniz olabilir.
atıyorum fişnumarasından kayıt türünden vs. belli kriterlerle eklediğiniz kaydı seçebilirsiniz.
kolay gelsin.
bir başka yöntemde insert ettiğiniz kaydı select etmeniz olabilir.
atıyorum fişnumarasından kayıt türünden vs. belli kriterlerle eklediğiniz kaydı seçebilirsiniz.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Re: Yaptığım Son Kaydın PK Alanını Alma
@@Identity biraz tehlikeli bir kullanıma sahip. Siz kayıt ekledikten kısa bir zaman sonra yani siz @@Identity'nin değerini select etmeden önce birisi kayıt girdi ise hatalı sonuçlarla karşılaşabilmeniz olası. Bu vesile ile; en güzeli girdiğiniz verilere göre unique olabilecek bir Select Max(Id) Where ... çağrımı olacak gibi görünüyor.
Re: Yaptığım Son Kaydın PK Alanını Alma
Merhaba yanlış hatırlamıyorsam tıpkı MySQL de olduğu gibi @@identity gibi komutlar thread isole olarak MSSQL'e açılan her bağlantı kanalı için ayrı takip ediyor olmalı yani örneğin projenizde bir tane TAdoConnection nesnesi kullandınız bu connection nesnesi üzerinde yaptığınız kayıtlar için @@identity sadece o kanal için yapılan en son otomatik artan alan değerini verir yani sorun çıkmaması gerekir, MSSQL hakkında çok bilgi sahibi değilim fakat şöyle bir mantıkta vardı sanırım örn "@" tek at kullanımı local yani sizin thread üzerindeki değişken değerine "@@" çift at ise ilgili değişken eğer destekliyorsa tüm threadler içinde yani global olarak değişken değerine erişim sağlıyordu, bu durumda siz @@identity yi tek @ ile @identity olarak kullanmanız gerekir. hatalarım varsa af ola. iyi çalışmalar.
Volkan KAMADAN
www.polisoft.com.tr
www.polisoft.com.tr
Re: Yaptığım Son Kaydın PK Alanını Alma
Hocam, IDENT_CURRENT fonksiyonunu help'ten incelerseniz muhtemelen işinizi görür:
"IDENT_CURRENT( 'table_name' ), IDENT_CURRENT returns the last identity value generated for a specific table in any session and any scope."
Kolay gelsin.
"IDENT_CURRENT( 'table_name' ), IDENT_CURRENT returns the last identity value generated for a specific table in any session and any scope."
Kod: Tümünü seç
SELECT IDENT_CURRENT ('Person.Address') AS Current_Identity;
Re: Yaptığım Son Kaydın PK Alanını Alma
Arkadaşlar bu tarz durumları bence daha geniş düşünmek icap ediyor. Uygulama 3 katmanlı bir uygulama da olabilir. Bu gibi bir durumda genelde sadece bir tane connection üzerinden veritabanına ulaşırız yada aynı connection'ı paylaşan, connection bilgilerini bir havuzdan alan birden fazla kullanıcı olabilir. En makulü Select Max(Id).. Where gibi bir kullanım ama, ben riski severim diyorsanız seçim sizin tabii.
Re: Yaptığım Son Kaydın PK Alanını Alma
C# da linq ile kolayca yapabilirsin
Kod: Tümünü seç
public void LinqToSqlAdvanced05()
{
Console.WriteLine("ContactID is marked as an identity column");
dynamic con = new Contact {
CompanyName = "New Era",
Phone = "(123)-456-7890"
};
db.Contacts.Add(con);
db.SubmitChanges();
Console.WriteLine();
Console.WriteLine("The ContactID of the new record is {0}", con.ContactID);
cleanup130(con.ContactID);
}