Soran
Tablo koplayamada bir sorunum var. yardım edermisiniz...

Genel Tartışma
-
Öğretmenler adlı tablom var bunun içindeki ÖğretmenID ve AdiSoyadi kısmını diğer tablo olan Yetkiler tablosundaki ÖğretmenID ve AdiSoyadi kısmına kopyalamak istiyorum. ancak farklı olanları ekleyecek. yani yeni öğretmen eklendiğinde yeni olanı Yetkiler tablosuna kopyalacak. bunu nasıl yapabiliriz. sql kodu nasıl olmalı?
- Değiştirilmiş Tür Kyamuran SalibryamMicrosoft contingent staff, Moderator 23 Şubat 2017 Perşembe 09:00
Tüm Yanıtlar
-
INSERT INTO Yetkiler SELECT O.OgretmenID, O.AdiSoyadi FROM Ogretmenler O LEFT JOIN Yetkiler Y ON (Y.OgretmenID = O.OgretmenID) WHERE Y.OgretmenID IS NULL
WHERE Y.OgretmenID IS NULL koşulu, Ogretmenler'de olan fakat Yetkiler'de olmayan kayıtları ortaya çıkarıyor, ama bunu LEFT JOIN sayesinde yapıyor. LEFT JOIN olmadan söz konusu WHERE koşulu kendi başına işe yaramaz.
Denedim çalışıyor.
Bir not: Diyelim ki iki tablo senkronize edildi. Aradan bir süre geçti ve Ogretmenler tablosundan bir kayıt silindi. Yukardaki işlem, bu silinen kaydı Yetkiler tablosundan SİLMEYECEKTİR. Eğer böyle bir durum varsa, Yetkiler tablosunu tamamen boşaltıp Ogretmenler tablosunun güncel durumu ile doldurmak daha doğru olur.
-
-
-
-
şu kodu buldum. bu kodu SQL serverde New Query de çalıştırdığımda çalışıyor. Tam istediğim gibi. eksiklikleri tamamlıyor vs.. ama asp.net in cs sayfasına yazdığımda yapmıyor. bu kodu sql le nasıl göndereceğim.
MERGE INTO dbo.Yetkiler as t
USING dbo.Ogretmenler as s
ON t.OgretmenID = s.OgretmenID
WHEN NOT MATCHED BY TARGET THEN
INSERT (OgretmenID, AdiSoyadi)
VALUES (s.OgretmenID, s.AdiSoyadi);ben bunu şu şekilde yaptım.
SqlCommand yetkikoplama = new SqlCommand(" MERGE INTO dbo.Yetkiler as t " +
" USING dbo.Ogretmenler as s " +
" ON t.OgretmenID = s.OgretmenID " +
" WHEN NOT MATCHED BY TARGET THEN " +
" INSERT (OgretmenID, AdiSoyadi) " +
" VALUES (s.OgretmenID, s.AdiSoyadi);");
yetkikoplama.ExecuteNonQuery();AŞAĞIDAKİ HATA VERİYOR
ExecuteNonQuery: Connection özelliği başlatılmamış.
Açıklama: Geçerli web isteği yürütülürken işlenmemiş özel durum oluştu. Lütfen hata ve kod içinde kaynaklandığı yer hakkında daha fazla bilgi almak için yığın izlemesini gözden geçirin.
Özel Durum Ayrıntıları: System.InvalidOperationException: ExecuteNonQuery: Connection özelliği başlatılmamış.
Kaynak Hatası:Satır 138: " INSERT (OgretmenID, AdiSoyadi) " + Satır 139: " VALUES (s.OgretmenID, s.AdiSoyadi);"); Satır 140: yetkikoplama.ExecuteNonQuery(); Satır 141: } Satır 142: }
-
-
:)) yaaa insan içine girince bazen göremiyor. sqlconnection yazmamışsın diye bas bas bağırıyor :))) sqlconnection ekleyince oldu :))) acemilik işte.
Ama ilginiz ve bana vakit ayırdığınız için çok ama çok teşekkür ederim. problemimi çözdüm. iyiki varsınızı. iyiki msdn var. sizler sayesinde çok yol katetdim.
-
-
-
yok sayfayı yeni yazıyorum. yetki bölümü yapıyorum. ama öğretmenlerin adını ve id numaraların yetki bölümüne taşımak istiyorum. amacım oydu. şuan bunu başardım. sayfa yüklendiğinde otomatik olarak tamamlıyor eksik olanları böylece yetkileme işlemi için checkboxlist den seçim başlıyor. senaryo bu şekilde..
-
yok sayfayı yeni yazıyorum. yetki bölümü yapıyorum. ama öğretmenlerin adını ve id numaraların yetki bölümüne taşımak istiyorum. amacım oydu. şuan bunu başardım. sayfa yüklendiğinde otomatik olarak tamamlıyor eksik olanları böylece yetkileme işlemi için checkboxlist den seçim başlıyor. senaryo bu şekilde..
Biraz evvelki hatanın açıklayıcı mesajı barizdi - connection yapılmadan sorgulama yapılıyor diyor. -
-
INSERT INTO Yetkiler SELECT O.OgretmenID, O.AdiSoyadi FROM Ogretmenler O LEFT JOIN Yetkiler Y ON (Y.OgretmenID = O.OgretmenID) WHERE Y.OgretmenID IS NULL
BU KODU ÇALIŞTARABİLSEYDİM BUNU KULLANIRDIM.BU DAHA ANLAŞILIR BANA GÖRE VE DEĞİŞKİKLİK YAPABİLİRİM.
ESNEK BİR KOD AMA ÇALIŞMADI YAZDIĞIM GİBİ BİR HATA VERİYOR SQLSERVERDE
-
-
INSERT INTO Yetkiler SELECT O.OgretmenID, O.AdiSoyadi FROM Ogretmenler O LEFT JOIN Yetkiler Y ON (Y.OgretmenID = O.OgretmenID) WHERE Y.OgretmenID IS NULL
BU KODU ÇALIŞTARABİLSEYDİM BUNU KULLANIRDIM.BU DAHA ANLAŞILIR BANA GÖRE VE DEĞİŞKİKLİK YAPABİLİRİM.
ESNEK BİR KOD AMA ÇALIŞMADI YAZDIĞIM GİBİ BİR HATA VERİYOR SQLSERVERDE
INSERT INTO Yetkiler (OgretmenID, AdiSoyadi) SELECT O.OgretmenID, O.AdiSoyadi FROM Ogretmenler O LEFT JOIN Yetkiler Y ON (Y.OgretmenID = O.OgretmenID) WHERE Y.OgretmenID IS NULL
Orijinaline göre tek değişiklik kalın kısımlar. Orijinali iki tablonun birebir aynı olduğunu varsayıyordu, tabii bu hatalı bir varsayımmış!
- Düzenleyen A.M. Sabuncu 12 Şubat 2017 Pazar 12:44
-
-
-
-
teşekkür ederim....
ozaman size bu kodun kaynağını olduğu adresi vereyim.orada ekstra güncelleme, silme, gibi konudlarda var ve en önemlisi performanstanda bahsediyor.
İşinize yarayabilir...
http://www.abdullahaltintas.com/sql-server-merge-komutu-kullanimi-ve-performans-onerileri/