none
Sql şartlı güncelleme RRS feed

  • Soru

  • Arkadaşlar Merhaba

    Benim bir sql tablom var ve bu tobloda renk adında bir sütunum var.

    yaklaşık olarak da 30000 kaydım var

    ben tek seferlik olarak bu kayıtların renk bölümüne seçtiğim 10 rengin kodunu eklemek istiyorum

    yani ilk on kaydın rengi kırmızı, yeşil mavi.... olduktan sonra sonraki on kaydın rengi de  tekrar kırmızı , yeşil mavi... den başlamasını istiyorum bunu nasıl yapabilirim yardımlarınızı bekliyorum

    16 Eylül 2017 Cumartesi 13:10

Tüm Yanıtlar

  • Merhaba

    İlk aklıma gelen çözüm SQL üzerinde while döngüsü kullanmak. Aşağıdaki kod bütün satırlara sırayla Kırmızı, Yeşil, Mavi olarak ekleyecektir.

    DECLARE @i INT = 1
    
    WHILE @i <= 30000
    BEGIN
    UPDATE tablo SET renk='Kırmızı' where id='i'
    UPDATE tablo SET renk='Yeşil' where id='i+1'
    UPDATE tablo SET renk='Mavi' where id='i+2'
    END 

    • Yanıt Olarak Öneren Şafak ARKUN 16 Eylül 2017 Cumartesi 17:54
    16 Eylül 2017 Cumartesi 14:28
  • yanıtınız için çok teşekkür ederim.

    fakat güncellenecek tablodaki id sütunu sıralı olarak gitmiyor olabilir. yani arada silinmiş kayıtlar olabilir.

    bir de bu döngü sayısı güncellenecek tablodaki satır sayısı olmalıdır.

    16 Eylül 2017 Cumartesi 14:39
  • Merhaba, 

    Bu sorunu Update SP (Store Procedure) yazarak çözebileceğinizi düşünüyorum. Oluşturduğunuz SP içerisinde id sütunundaki değerleri bir parametre (@ID) ile programın arayüzünde bir nesne ile DB ye aktarıp belirtilen WHILE yapısı içerisine aktarabilirsiniz.

    İyi günler. 

    16 Eylül 2017 Cumartesi 17:54
  • DECLARE @tablo TABLE (numara int,renk text)
    INSERT INTO @tablo (numara, renk)
    VALUES (1, '#2196f3');
    INSERT INTO @tablo (numara, renk)
    VALUES (2, '#ff9800');
    INSERT INTO @tablo (numara, renk)
    VALUES (3, '#9c27b0');
    INSERT INTO @tablo (numara, renk)
    VALUES (4, '#8bc34a');
    INSERT INTO @tablo (numara, renk)
    VALUES (5, '#607d8b');
    INSERT INTO @tablo (numara, renk)
    VALUES (6, '#ffc107');
    INSERT INTO @tablo (numara, renk)
    VALUES (7, '#e91e63');
    INSERT INTO @tablo (numara, renk)
    VALUES (8, '#03a9f4');
    INSERT INTO @tablo (numara, renk)
    VALUES (9, '#795548');
    INSERT INTO @tablo (numara, renk)
    VALUES (10, '#cddc39');
    
    DECLARE @sırano INT = 0
    DECLARE @Yevmiyeler TABLE (sırano int,renk text,personelno int)
     
    INSERT INTO @Yevmiyeler
    SELECT ROW_NUMBER() OVER (ORDER BY No) AS Satır,PersonelRengi,No 
    FROM PersonelListesi
    order by KullanıcıNo
    
    UPDATE @Yevmiyeler
    set  @sırano =case when @sırano = 10 then 1 else @sırano + 1 end, sırano=@sırano
    FROM @Yevmiyeler 
      
    UPDATE @Yevmiyeler
    set renk=( select renk from @tablo where numara =sırano)
    FROM @Yevmiyeler tt
    
    UPDATE PersonelListesi set PersonelRengi =(select renk from @Yevmiyeler where personelno =No ) 
    
    şöyle bir kod yazarak güncellemeyi yaptım . 25bin kayıt üzerinde iki buçuk dakika sürdü. belki uzun bir sorgu yazmış olabilirim ama işimi gördü ilgilenen herkese teşekkür ederim. ayrıca bu sorguyu kısaltabilecek arkadaşlarında cevap yazmasını bekliyorum
    16 Eylül 2017 Cumartesi 18:34