Sql Insert Sorgu Yardımı
-
Hocalarım mesela 2 tablo var Kullanicilar diye icerisinde KullaniciId AutoInc. KullaniciAdi KullaniciAdi ReferansId olsun. Birde Referanslar Tablosu olsun ReferansId , ReferansSoyAdi,ReferansAdi olsun. Mesela ben bir Kullanici ekliyorum ya. Eklerken KullaniciAdi / SoyAdi , Referans Adi , Referans Soyadi alıyorum 4 parametre ve ben bunları VT Kaydedeceğim. Tek bir Sorgu ile 2 tarafa nasıl kaydedeceğim ?. Mesela Kullaniciyi ekledim diyelim. ReferansId de AutoIncrement ve bunu da yeniden ekleyeceğim. Bu sefer ReferansId yeni olduğu için Gidip Referanslar tablosundan son veriyi mi çekeceğim ? bu da saçma oluyor. Aynı anda 2 istekte bulunabilir kullanıcı bu sefer çakışır. Kafam karıştı bir aydınlatacak mürit var mıdır ? Senaryoyu anlatamaya bilirim anlamayan olursa bi şey etse tekrar anlatmaya çalışayım
-
tek bir sorgu ile olmaz o istediğin 2 tabloya insert işi benim bildiğim
transaction ile olur 2 ayrı insertyapabilirsin.
-
Şöyle düşündüm
Insert Into ReferansBilgileri (ReferansAdi,ReferansSoyadi,ReferansEkBilgi) values ('Ali','Veli','49 , 50'); Tablo=Select * From ReferansBilgileri Order By ReferansId ASC for(int i=0;i<Tablo.Leght;i++) { if(Tablo[i].ReferansAdi=="Ali") { ReferansId=Tablo[i].ReferansId; //ReferansId bu şekilde bulduktan sonra KullaniciBilgilerine çaksam mesela ? Insert Into KullaniciBilgileri ............ break; } }
Böyle bir Mantık APTALCA olur mu ?? birde Web Api yazacağım da.
Edit : Yazılan dil'i ben ürettim böyle bir dil yok sadece kod ile ifade edeyim dedim ...
-
Bilen yokmu yav :(
-
once tabloya git, en buyuk id degerini al
sonra insert sorgunu o id degerinin bi fazlasiyla tek seferde yaz. ama yine de totalde 2 sorgu calistirmis oluyosun
ayrica, bu yaptigin performansta ne kadar farkettiricekki allasen
-
transaction kullanacaksın
-
@babayarisi hocam @SSH 'da dedi ikisi de aynı yani Transaction da kullansak aynı kapıya çıkıyor yani....
@nurumlac11 hocam düşün Aldın Son ID değerini O an bir post daha geldi. Ortalık savaş alanına dönüp karışmaz mı ? Yani performans ile alakalı bi durum değil . işi çözemedim Yanlış birşey yapmayayım diyorum.
-
Hocam çok sık işlem yapılmiyorsa insert kodunun hemen ardına koyacağın lastinsertid ile işini halledersin. Ama yok illa çalışma olmasın diyorsan kayıt tablo na bir column daaha ekler orada da kayıt sırasında oluşturduğu n benzersiz bir değişkeni atarsin. Yani id ler ile değilde kayıt sırasında oluşturduğu n değişken ile bağ kurmuş olursun.
Sonu olarak her halukar da iki insert işlemi olmuş oluyor
-
Siz bu şekilde mi yapıyorsunuz ? Ya benim kafama takılan şu . Mesela web de çalışıyor kod diyelim.
Adım 1 . Referans Eklendi
Adım 2. Son Eklenenin ReferansId çekildi (Auto I zaten)
Adım 3 . Calisan Tablosuna ReferansId ile birlikte Calisan eklendi
Adım 4. Son Eklenen Calisanin Id si çekildi.
Adım 5. Kullanıcılar Tablosuna CalisanId ile birlikte KullaniciAdı/Şifre Eklendi.
Son.
Eğer bu şekilde ise... 2 kişi bu işlemi yaptı. birinin interneti 50 MBit diğerinin 2 MBit. 2Mbit olan önceden Kayıt olmaya çalışıyor mesela Adımlar tek tek çalışıyor. Adam Idleri çekerken bir 50Mbit olan da girsin mesela 2Mbit olan Referans Ekledikten hemen sonra 50Mbit olan da bu ReferansId çekerse ? Noldu 2 si arasında bir karmaşıklık meydana geldi :( Yanlış mı düşünüyorum Sonuçta Bu şekilde çalışmıyor mu işlemler. Web de ? Web Taraflı yani ... Höfff kafam allak bullak oldu yahu. Şunun cevabını bir bulamadım arkadaş.
-
Stored procedure ile topluca bir komut yazılır. Sonrasında db tarafına gönderdiğin tek bir komutla iş çözülebilir.
-
@UCANTENEKE , Ah be hiç aklıma gelmedi he. Harbiden ya :D Teşekkür ederim. Bende diyorum bunu C# da nasıl yapıyordum ben eski projelere bakıyordum :D:Dd