none
Tablo koplayamada bir sorunum var. yardım edermisiniz... RRS feed

  • 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ı?
    12 Şubat 2017 Pazar 10:35

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.

    12 Şubat 2017 Pazar 12:04
  • çok ama çok teşekkür ederim. ancak sql query de bunu çalıştırdığımda şu hata veriyor.

    Msg 213, Level 16, State 1, Line 1
    Column name or number of supplied values does not match table definition.

    nasıl çözebilirim.

    12 Şubat 2017 Pazar 12:09
  • ama ben tablonun tamamını almak istemiyorum. sadece 2 kolonunu kopyalamak istiyorum.
    12 Şubat 2017 Pazar 12:13
  • aynı zamanda kopyalanacak kolonda aynısı varsa tekrar yazmayacak. veya eğer yoksa onu ekleyecek.
    12 Şubat 2017 Pazar 12:13
  • ş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:    }

    12 Şubat 2017 Pazar 12:21
  • Column name or number of supplied values does not match table definition.

    nasıl çözebilirim.

    İki tablonun yapıları farklı olduğu için bu hatayı veriyor.  Tablolardaki kolon isimlerini paylaşın lütfen.
    12 Şubat 2017 Pazar 12:26
  • :)) 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.

    12 Şubat 2017 Pazar 12:27
  • Söz konusu sayfa bundan evvel çalışıyor muydu? Yani sadece sorguda mı değişiklik yaptınız yoksa sayfayı yeni mi geliştiriyorsunuz?
    12 Şubat 2017 Pazar 12:28
  • select * into deneme from tablo;
    select * into deneme from tablo where ıd="";

    information technologies


    Yukardakiler ne yapıyor? Gerçekten anlamak istiyorum - soruyla ne ilgisi var kavrayamadım.  Ayrıca id alanı null olan bir kayıt tabloda nasıl olabilir?
    12 Şubat 2017 Pazar 12:31
  • 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..
    12 Şubat 2017 Pazar 12:31
  • 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.
    12 Şubat 2017 Pazar 12:33
  • aslında en yukarıdaki benim anlayacağım tarzda. ama onu çalıştıramadım. çalıştırsam onu kullanırdım. 
    12 Şubat 2017 Pazar 12:33
  • 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

    12 Şubat 2017 Pazar 12:34
  • Öğretmenler Tablomdan ÖğretmenID si ve AdiSoyadi sütununu Yetkiler Tablosundaki OgretmenID ve AdiSoyadi Sütununa taşıma olay. tablolarımın ismi bu.
    12 Şubat 2017 Pazar 12:36
  • 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ış!


    12 Şubat 2017 Pazar 12:44
  • evet buda çalıştı. bunu kullanacağım.

    ilginiz için çok teşekkür ederim. çok sağolun...

    12 Şubat 2017 Pazar 12:50
  • bu arada konu dışı soracağım. ben asp.net yeniyim. yeni öğrenmeye çalışıyorum. şu puan olayı. sizin 490 puanınız varya. size puan vermek nasıl oluyor. bu vakit ayırmanıza karşılık size puan vermek istiyorum. size puan verebiliyormuyum?
    12 Şubat 2017 Pazar 12:52
  • Çalıştığına sevindim.

    Seçtiğiniz cevabı yanıt olarak işaretleyince kullanıcı puan alıyor.  Ayrıca "Oy Ver" butonuna tıklayınca kullanıcı ek oy alıyor.

    Ben de sizin "MERGE..." cevabınızı oyladım, çünkü o sorgu sayesinde bilmediğim birşey öğrenmiş oldum.

    12 Şubat 2017 Pazar 13:20
  • 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/

    12 Şubat 2017 Pazar 13:23