none
MSSQL Server'da UyeNo Satırındaki Kayıtlara Toplu Borç Ekleme RRS feed

  • Soru

  • Merhabalar, mssql veritabanında oluşturduğum tabloda UyeNo 'da olan kayıtların tümüne borç eklemek istiyorum. Bu İşlemi nasıl yapabiliriz? Yardımlarınızı rica eder, şimdiden teşekkürler dilerim.

    Tablo Yapım şu şekildedir;

    AidatID int
    UyeNo nvarchar(200)
    AidatBasligi nvarchar(200)
    AidatTarihi datetime
    SonOdemeTarihi datetime
    Odedimi bit
    BorcTutar money

    Veri Çıkışı Örnek;

    1 1 Test 2019-12-09 00:00:00.000 2020-01-09 00:00:00.000 False 40,0000
    2 1 Testss 2019-12-09 00:00:00.000 2020-01-09 00:00:00.000 True 15,5000
    3 1 Testss 2019-12-09 00:00:00.000 2020-01-09 00:00:00.000 True 15,5000
    4 1 Testss 2019-12-09 00:00:00.000 2020-01-09 00:00:00.000 False 40,0000
    5 2 asfasasf 2019-12-09 19:14:56.330 2020-01-09 19:15:01.673 True 99,5000
    6 2 sdgsdgsdg 2019-12-01 19:15:08.113 2020-01-24 19:15:10.957 False 40,0000
    7 1 nhjhgfhgf 2019-12-21 19:15:14.183 2019-12-12 19:15:16.213 False 40,0000
    8 2 dfhdfhdhfhfd 2015-12-11 19:15:38.617 2019-12-09 19:15:15.487 True 15,5000
    9 2 sdgsdg 2019-10-17 19:15:22.100 2019-12-14 19:15:24.300 True 15,5000
    10 2 a 2018-12-08 19:15:27.590 2019-12-13 19:15:30.877 False 40,0000
    11 2 aaa 2017-12-21 19:15:32.947 2019-12-15 19:15:35.077 False 40,0000
    12 1903 Test 2019-12-13 00:00:00.000 2020-01-13 00:00:00.000 False 400,0000
    13 1903 Test 2019-12-13 00:00:00.000 2020-01-13 00:00:00.000 False 150,0000
    14 1903 1900-01-01 00:00:00.000 1900-01-01 00:00:00.000 False 40,0000
    15 1903 1900-01-01 00:00:00.000 1900-01-01 00:00:00.000 False 40,0000
    16 1903 1900-01-01 00:00:00.000 1900-01-01 00:00:00.000 False 40,0000
    17 1903 1900-01-01 00:00:00.000 1900-01-01 00:00:00.000 False 40,0000
    18 2 1900-01-01 00:00:00.000 1900-01-01 00:00:00.000 False 40,0000
    19 2 1900-01-01 00:00:00.000 1900-01-01 00:00:00.000 False 40,0000
    20 1 Test 2019-12-13 00:00:00.000 2020-01-13 00:00:00.000 False 40,0000
    21 2 Test 2019-12-13 00:00:00.000 2020-01-13 00:00:00.000 False 505,0000
    22 2 Test 2019-12-13 00:00:00.000 2020-02-13 00:00:00.000 False 400,0000
    23 1903 1900-01-01 00:00:00.000 1900-01-01 00:00:00.000 False 40,0000
    24 1903 1900-01-01 00:00:00.000 1900-01-01 00:00:00.000 False 40,0000
    25 1903 1900-01-01 00:00:00.000 1900-01-01 00:00:00.000 False 40,0000
    26 2 1900-01-01 00:00:00.000 1900-01-01 00:00:00.000 False 40,0000
    27 2 1900-01-01 00:00:00.000 1900-01-01 00:00:00.000 False 40,0000
    28 2 1900-01-01 00:00:00.000 1900-01-01 00:00:00.000 False 40,0000
    29 1903 Test 2019-12-13 00:00:00.000 2020-01-13 00:00:00.000 False 400,0000
    NULL NULL NULL NULL NULL NULL NULL


    • Düzenleyen Mero Laika 13 Aralık 2019 Cuma 13:51 Başlık Değişimi
    13 Aralık 2019 Cuma 13:50

Yanıtlar

  • Yapmak istediğiniz tum BorcTutar'lara, ornegin 50 lira eklemek mi?

    DECLARE @uyeno TABLE
    (
        AidatID INT,
        UyeNo NVARCHAR(200),
        AidatBasligi NVARCHAR(200),
        AidatTarihi DATETIME NULL,
        SonOdemeTarihi DATETIME NULL,
        Odedimi BIT,
        BorcTutar MONEY
    );
    
    INSERT INTO @uyeno
    (
        AidatID,
        UyeNo,
        AidatBasligi,
        AidatTarihi,
        SonOdemeTarihi,
        Odedimi,
        BorcTutar
    )
    VALUES
    (1, '1', 'Test', '2019-12-09 00:00:00.000', '2020-01-09 00:00:00.000', 0, 40.0000),
    (2, '1', 'Testss', '2019-12-09 00:00:00.000', '2020-01-09 00:00:00.000', 1, 15.5000),
    (3, '1', 'Testss', '2019-12-09 00:00:00.000', '2020-01-09 00:00:00.000', 1, 15.5000),
    (4, '1', 'Testss', '2019-12-09 00:00:00.000', '2020-01-09 00:00:00.000', 0, 40.0000),
    (5, '2', 'asfasasf', '2019-12-09 19:14:56.330', '2020-01-09 19:15:01.673', 1, 99.5000),
    (6, '2', 'sdgsdgsdg', '2019-12-21 19:15:14.183', '2019-12-12 19:15:16.213', 0, 40.0000),
    (8, '2', 'dfhdfhdhfhfd', '2015-12-11 19:15:38.617', '2019-12-09 19:15:15.487', 1, 15.5000),
    (9, '2', 'sdgsdg', '2019-10-17 19:15:22.100', '2019-12-14 19:15:24.300', 1, 15.5000),
    (10, '2', 'a', '2018-12-08 19:15:27.590', '2019-12-13 19:15:30.877', 0, 40.0000),
    (11, '2', 'aaa', '2017-12-21 19:15:32.947', '2019-12-15 19:15:35.077', 0, 40.0000),
    (12, '1903', 'Test', '2019-12-13 00:00:00.000', '2020-01-13 00:00:00.000', 0, 400.0000),
    (13, '1903', 'Test', '2019-12-13 00:00:00.000', '2020-01-13 00:00:00.000', 0, 150.0000),
    (14, '1903', 'Test', NULL, NULL, 0, 40.0000),
    (15, '1903', 'Test', NULL, NULL, 0, 40.0000),
    (16, '1903', 'Test', NULL, NULL, 0, 40.0000),
    (17, '1903', 'Test', NULL, NULL, 0, 40.0000),
    (18, '2', 'Test', NULL, NULL, 0, 40.0000),
    (19, '2', 'Test', NULL, NULL, 0, 40.0000),
    (20, '1', 'Test', '2019-12-13 00:00:00.000', '2020-01-13 00:00:00.000', 0, 40.0000),
    (21, '2', 'Test', '2019-12-13 00:00:00.000', '2020-01-13 00:00:00.000', 0, 505.0000),
    (22, '2', 'Test', '2019-12-13 00:00:00.000', '2020-02-13 00:00:00.000', 0, 400.0000),
    (23, '1903', 'Test', NULL, NULL, 0, 40.0000),
    (24, '1903', 'Test', NULL, NULL, 0, 40.0000),
    (25, '1903', 'Test', NULL, NULL, 0, 40.0000),
    (26, '2', 'Test', NULL, NULL, 0, 40.0000),
    (27, '2', 'Test', NULL, NULL, 0, 40.0000),
    (28, '2', 'Test', NULL, NULL, 0, 40.0000),
    (29, '1903', 'Test', '2019-12-13 00:00:00.000', '2020-01-13 00:00:00.000', 0, 400.0000);
    
    SELECT * FROM @uyeno; -- eklemeden onceki hali
    
    DECLARE @eklenecekTutar MONEY = 50;
    UPDATE @uyeno
    	SET BorcTutar = BorcTutar + @eklenecekTutar;
    SELECT * FROM @uyeno;
    



    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.

    • Yanıt Olarak İşaretleyen Mero Laika 14 Aralık 2019 Cumartesi 10:25
    13 Aralık 2019 Cuma 16:36
  • UPDATE tabloAd
    	SET BorcTutar = BorcTutar + @eklenecekTutar
    WHERE UyeNo = 1;
    
    gibi yapabilirsiniz.


    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.

    • Yanıt Olarak İşaretleyen Mero Laika 14 Aralık 2019 Cumartesi 21:13
    14 Aralık 2019 Cumartesi 21:01
  • Kayitli olan uyeNo'lar nereden gelecek? Ayni tablodan mi? Oyle ise:

    INSERT INTO Aidat 
       (UyeNo, AidatBasligi, AidatTarihi, SonOdemeTarihi, BorcTutar)
    select distinct UyeNo,'Baslik','2019','2020',50)
    from tabloAd;
    Not: TabloAd adli tablodan uyeNo'lari alıp ayni tabloya her biri icin o degerlerle kayit ekleniyor. '2019', '2020' gibi degerler datetime icin uygun degil ama onları ornek olarak yazdiginizi kabul ediyorum.



    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.

    • Yanıt Olarak İşaretleyen Mero Laika 15 Aralık 2019 Pazar 21:07
    15 Aralık 2019 Pazar 15:42
  • Kod stabil, onda sorun yok. Özetler olarak kodun yaptigi:

    Use tablosundan UyeNo 0-99999999999... arasında olanların üye nolarini alip (birer kez), yanina 'Baslik', '2019','2020',40 gibi sabit degerleri ekleyerek Aidat tablosuna eklemek.

    Normal bir veritabanı yapisinda, Uyeler tablosunda her üye (ve dolayisiyla UyeNo) bir tek kez geçer (hatta bu UyeNo primary key yani birincil anahtar olarak atanır). Bu veritabanı kurallarını uygulamış olursanız kod "distinct" gerektirmez (olması zarar da vermez ama normalde kullanılmaz). Ayni insanların elle yaptigi gibi, üye tablosundan üye nolari al, her biri icin   'Baslik', '2019','2020',40 degerleriyle Aidat tablosunda yeni bir kayıt oluştur seklinde bir komut olur:

    INSERT INTO Aidat 
      (UyeNo, AidatBasligi, AidatTarihi, SonOdemeTarihi, BorcTutar)
    select UyeNo,'Baslik','2019','2020',40
    FROM Uye;
    Üye tablosunda gercekten bir filtreleme gerekmiyorsa, o sekilde bir WHERE eklemeye de gerek yok.



    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.

    • Yanıt Olarak İşaretleyen Mero Laika 7 Ocak 2020 Salı 10:26
    6 Ocak 2020 Pazartesi 13:28

Tüm Yanıtlar

  • Yapmak istediğiniz tum BorcTutar'lara, ornegin 50 lira eklemek mi?

    DECLARE @uyeno TABLE
    (
        AidatID INT,
        UyeNo NVARCHAR(200),
        AidatBasligi NVARCHAR(200),
        AidatTarihi DATETIME NULL,
        SonOdemeTarihi DATETIME NULL,
        Odedimi BIT,
        BorcTutar MONEY
    );
    
    INSERT INTO @uyeno
    (
        AidatID,
        UyeNo,
        AidatBasligi,
        AidatTarihi,
        SonOdemeTarihi,
        Odedimi,
        BorcTutar
    )
    VALUES
    (1, '1', 'Test', '2019-12-09 00:00:00.000', '2020-01-09 00:00:00.000', 0, 40.0000),
    (2, '1', 'Testss', '2019-12-09 00:00:00.000', '2020-01-09 00:00:00.000', 1, 15.5000),
    (3, '1', 'Testss', '2019-12-09 00:00:00.000', '2020-01-09 00:00:00.000', 1, 15.5000),
    (4, '1', 'Testss', '2019-12-09 00:00:00.000', '2020-01-09 00:00:00.000', 0, 40.0000),
    (5, '2', 'asfasasf', '2019-12-09 19:14:56.330', '2020-01-09 19:15:01.673', 1, 99.5000),
    (6, '2', 'sdgsdgsdg', '2019-12-21 19:15:14.183', '2019-12-12 19:15:16.213', 0, 40.0000),
    (8, '2', 'dfhdfhdhfhfd', '2015-12-11 19:15:38.617', '2019-12-09 19:15:15.487', 1, 15.5000),
    (9, '2', 'sdgsdg', '2019-10-17 19:15:22.100', '2019-12-14 19:15:24.300', 1, 15.5000),
    (10, '2', 'a', '2018-12-08 19:15:27.590', '2019-12-13 19:15:30.877', 0, 40.0000),
    (11, '2', 'aaa', '2017-12-21 19:15:32.947', '2019-12-15 19:15:35.077', 0, 40.0000),
    (12, '1903', 'Test', '2019-12-13 00:00:00.000', '2020-01-13 00:00:00.000', 0, 400.0000),
    (13, '1903', 'Test', '2019-12-13 00:00:00.000', '2020-01-13 00:00:00.000', 0, 150.0000),
    (14, '1903', 'Test', NULL, NULL, 0, 40.0000),
    (15, '1903', 'Test', NULL, NULL, 0, 40.0000),
    (16, '1903', 'Test', NULL, NULL, 0, 40.0000),
    (17, '1903', 'Test', NULL, NULL, 0, 40.0000),
    (18, '2', 'Test', NULL, NULL, 0, 40.0000),
    (19, '2', 'Test', NULL, NULL, 0, 40.0000),
    (20, '1', 'Test', '2019-12-13 00:00:00.000', '2020-01-13 00:00:00.000', 0, 40.0000),
    (21, '2', 'Test', '2019-12-13 00:00:00.000', '2020-01-13 00:00:00.000', 0, 505.0000),
    (22, '2', 'Test', '2019-12-13 00:00:00.000', '2020-02-13 00:00:00.000', 0, 400.0000),
    (23, '1903', 'Test', NULL, NULL, 0, 40.0000),
    (24, '1903', 'Test', NULL, NULL, 0, 40.0000),
    (25, '1903', 'Test', NULL, NULL, 0, 40.0000),
    (26, '2', 'Test', NULL, NULL, 0, 40.0000),
    (27, '2', 'Test', NULL, NULL, 0, 40.0000),
    (28, '2', 'Test', NULL, NULL, 0, 40.0000),
    (29, '1903', 'Test', '2019-12-13 00:00:00.000', '2020-01-13 00:00:00.000', 0, 400.0000);
    
    SELECT * FROM @uyeno; -- eklemeden onceki hali
    
    DECLARE @eklenecekTutar MONEY = 50;
    UPDATE @uyeno
    	SET BorcTutar = BorcTutar + @eklenecekTutar;
    SELECT * FROM @uyeno;
    



    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.

    • Yanıt Olarak İşaretleyen Mero Laika 14 Aralık 2019 Cumartesi 10:25
    13 Aralık 2019 Cuma 16:36
  • Aynen öyle çok teşekkür ederim. Lakin UyeNo ları otomatik buldura bilirmiyim?

    • Düzenleyen Mero Laika 14 Aralık 2019 Cumartesi 10:28 Ekleme
    14 Aralık 2019 Cumartesi 10:25
  • UyeNo tablonun adi degil miydi? Soruyu anlayamadım.


    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.

    14 Aralık 2019 Cumartesi 19:22
  • UyeNo alanına c# forumdan gelen sayı giriliyor. UyeNo'da olan kayıtların hepsine yukarıda verdiğiniz örnekteki gibi borç ekletmek istiyorum., yada AidatID üzerinden de yapabilirmiyiz?

    Tablo Yapım şu şekildedir;

    AidatID int
    UyeNo nvarchar(200)
    AidatBasligi nvarchar(200)
    AidatTarihi datetime
    SonOdemeTarihi datetime
    Odedimi bit
    BorcTutar money

    14 Aralık 2019 Cumartesi 20:46
  • UPDATE tabloAd
    	SET BorcTutar = BorcTutar + @eklenecekTutar
    WHERE UyeNo = 1;
    
    gibi yapabilirsiniz.


    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.

    • Yanıt Olarak İşaretleyen Mero Laika 14 Aralık 2019 Cumartesi 21:13
    14 Aralık 2019 Cumartesi 21:01
  • Çok teşekkür ederim
    14 Aralık 2019 Cumartesi 21:13
  • UPDATE tabloAd
    	SET BorcTutar = BorcTutar + @eklenecekTutar
    WHERE UyeNo = 1;


    Verdiğiniz örnekte Tüm UyeNo'ları güncelleye biliyorum ancak yapmak istediğim Kayıtlı olan UyeNo no lara yeni tarih sonödeme tarihi yeni borç şeklinde toplu borç ekleme

    INSERT INTO Aidat (AidatBasligi,AidatTarihi,SonOdemeTarihi,BorcTutar)

    VALUES ('Baslik','2019','2020','50');

    Bu Şekilde yapabiliyorum ama UyeNo lar null olarak kayıt oluyor. Yapmak istediğim, kayıtlı olan tüm UyeNo'lara yeni borç eklemek..


    • Düzenleyen Mero Laika 15 Aralık 2019 Pazar 09:21
    15 Aralık 2019 Pazar 09:13
  • Kayitli olan uyeNo'lar nereden gelecek? Ayni tablodan mi? Oyle ise:

    INSERT INTO Aidat 
       (UyeNo, AidatBasligi, AidatTarihi, SonOdemeTarihi, BorcTutar)
    select distinct UyeNo,'Baslik','2019','2020',50)
    from tabloAd;
    Not: TabloAd adli tablodan uyeNo'lari alıp ayni tabloya her biri icin o degerlerle kayit ekleniyor. '2019', '2020' gibi degerler datetime icin uygun degil ama onları ornek olarak yazdiginizi kabul ediyorum.



    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.

    • Yanıt Olarak İşaretleyen Mero Laika 15 Aralık 2019 Pazar 21:07
    15 Aralık 2019 Pazar 15:42
  • INSERT INTO Aidat 
       (UyeNo, AidatBasligi, AidatTarihi, SonOdemeTarihi, BorcTutar)
    select distinct UyeNo,'Baslik','2019','2020',40
    from Aidat;

    Bu işimi gördü tekrardan çok teşekkür ederim.

    15 Aralık 2019 Pazar 21:07
  • INSERT INTO Aidat (UyeNo, AidatBasligi, AidatTarihi, SonOdemeTarihi, BorcTutar)
    select distinct UyeNo,'Baslik','2019','2020',40
    FROM Uye WHERE UyeNo BETWEEN 0 AND 99999999999999999999;

    Uye Tablosundan UyeNolari alıp Aiadt tablosundaki UyeNo lara ekledim.. Bu şekidle işimi gördü ancak kodlar nekadar stabil emin değilim.. Sizce böyle bir kod kullanmak mantıklı mı? bu arada başlık 2019 2020 40 gibi veriler asp.net webform c# textboxlardan geliyor

    6 Ocak 2020 Pazartesi 10:21
  • Kod stabil, onda sorun yok. Özetler olarak kodun yaptigi:

    Use tablosundan UyeNo 0-99999999999... arasında olanların üye nolarini alip (birer kez), yanina 'Baslik', '2019','2020',40 gibi sabit degerleri ekleyerek Aidat tablosuna eklemek.

    Normal bir veritabanı yapisinda, Uyeler tablosunda her üye (ve dolayisiyla UyeNo) bir tek kez geçer (hatta bu UyeNo primary key yani birincil anahtar olarak atanır). Bu veritabanı kurallarını uygulamış olursanız kod "distinct" gerektirmez (olması zarar da vermez ama normalde kullanılmaz). Ayni insanların elle yaptigi gibi, üye tablosundan üye nolari al, her biri icin   'Baslik', '2019','2020',40 degerleriyle Aidat tablosunda yeni bir kayıt oluştur seklinde bir komut olur:

    INSERT INTO Aidat 
      (UyeNo, AidatBasligi, AidatTarihi, SonOdemeTarihi, BorcTutar)
    select UyeNo,'Baslik','2019','2020',40
    FROM Uye;
    Üye tablosunda gercekten bir filtreleme gerekmiyorsa, o sekilde bir WHERE eklemeye de gerek yok.



    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.

    • Yanıt Olarak İşaretleyen Mero Laika 7 Ocak 2020 Salı 10:26
    6 Ocak 2020 Pazartesi 13:28