#3 MSSQL Eğitim Seti Tablodaki Veriyi Düzeltme - Update

Ocak 26, 2017 Mustafa BÜKÜLMEZ 0 Yorum

Selamlar arkadaşlar,


Bu dersimizde tabloya kaydettiğimiz verileri nasıl düzenleriz ona bakacağız. 


Önceki derslerimizdeki örneklerden devam edeceğim. Hemen dersimizde geçelim ve bir update script'i nasıl onu görelim. Ve yine elle yazmamıza gerek yok. Önceki dersimizde nasıl otomatik oluşturacağımızı anlatmıştım. Tek farkı bu sefer "UPDATE To" yu seçeceksiniz.


Update Sctiptimiz;


UPDATE [dbo].[Kategoriler]

   SET [Kat_Adi] = 

      ,[Kat_Aciklama] = 

      ,[Kaydeden] = 

      ,[Kayit_Tarih] = 

      ,[Degistiren] = 

      ,[Degistirme_Tarih] = 

      ,[Silen] = 

      ,[Silme_Tarih] = 

      ,[Silindi] = 

      ,[Aktif] = 

 WHERE


bu şekildedir ve otomatik oluşturma ile alınmıştır. İnsert komutundan biraz farklı olarak Update komutunda kolonlar ve güncellenecek değerler aralarında eşittir (=) ile yan yana olup bir şarta göre işlem yapılır. Eğer bir şarta bağlamazsak tüm tablodaki değerler güncellenir ki bu da bizi bitirebilir. Çok ciddi sorunlarla karşılaşabiliriz. En kötü yanı burada CTRL + Z işe yaramaz :)


Şimdi dolu bir scripti görelim;


NOT: Insert yaparken her kolona bir veri yazmamız gerekiyordu ama update' de sadece güncellemek istediğimiz kolonları yazmamız gerekiyor.


UPDATE [dbo].[Kategoriler]

   SET [Kat_Adi] = 'Kategori Adı'    

      ,[Degistiren] = 'Mustafa BÜKÜLMEZ'

      ,[Degistirme_Tarih] = '20161029'

 WHERE Kat_RECno = 1


Yukarıdaki örneğimizde RECno'su 1 olan kaydın kategori adını, değiştiren kişiyi ve değiştirilme tarihini güncelledik. Diğer kolonları güncellememize gerek yoktur.


Şimdi diyelimki bir kategoriyi sileceğiz. O zaman ne yapmalıyız? Önceki derslerimizde bahsettiğim genel kolonları kullancağız.


UPDATE [dbo].[Kategoriler]

   SET [Silen] = 'Mustafa BÜKÜLMEZ'

      ,[Silme_Tarih] = '20161029'

      ,[Silindi] = 'true'

 WHERE Kat_RECno = 1


Yukarıdaki örneğimizde RECno'su 1 olan kategoriyi silmiş olduk. Fiziksel olarak veri hala orada ama sadece hiçbir yerde bir daha görünmemesini istedik. İleriki bir zamanda bir sorun yaşarsak kimin sildiğini tabloya bakarak görebileceğiz.


NOT: Önceki dersimizde yine bahsetmiştim. Kolonun veri tipi tarih ama tek tırnak ile kayıt yapabiliyoruz diye. Bakın yine karşımıza geldi. Silindi kolonunun veri tipi " bit " 'tir yani ya " true " yada " false " olmak zorunda yani " Bool " bir değer olmak zorundadır. Peki ama biz oraya string bir veri gönderdik nasıl olacak? Arkadaaşlar yine burada string değer gönderiyoruz ama yazdığımız string değeri SQL kontrol edildiğinde içeriğinin bool bir ifade olduğunu anlayıp ona göre değeri alıyor ve işlemi hatasız yapıyor. Burada " true " yerine " 1 " de yazabilirdik ki buda integer bir değerdir. Buradaki gerekli düzenlemeleri SQL kendi halledip değeri algılayıp işlemi gerçekleştiriyor.


Update konusunda her zaman RECno(ID) yi kullanarak güncelleme yapmayız. Çünkü RECno ile güncelleme yaparsak sadece bir kaydı güncelleyebiliriz. Ya biz tek seferde 10-15 kaydı güncellemek istiyorsak. Bunun için güncelleme yapacağız satırların bir ortak noktası olmak zorundadır.


Farzedelim ki kategoriler tablomuzdaki silinmiş olan satırları geri getirmek istiyoruz. Yani hiç silinmemiş gibi olsunlar;


UPDATE [dbo].[Kategoriler]

   SET [Silen] = ''

      ,[Silme_Tarih] = '20000101'

      ,[Silindi] = 'false'

      ,Degistiren 'Mustada BÜKÜLMEZ'

      ,Degistirme_Tarih = '20161029'

 WHERE Silindi = 1


Evet yukarıdaki örneğimizde silinmiş olan kategorileri geri getirmiş olduk. Bu işlemi yaparkende Değiştiren ve Değiştirme Tarihi bilgilerinide işlem anındaki bilgiler olarak güncelledik.


NOT: Örneğe baktığımızda Silindi = 'false' derken where şartında Silindi = 1 dedik. Sorunsuz çalışacaktır. 


* Birden fazla şartı olan UPDATE


Şimdi buraya kadar her şey tamam. Ya iki yada daha fazla şart koşmamız gerekirse nasıl yapacağız?.


UPDATE [dbo].[Kategoriler]

   SET [Silen] = ''

      ,[Silme_Tarih] = '20000101'

      ,[Silindi] = 0

 WHERE Silindi = 1 and Silen = 'Mustafa BÜKÜLMEZ' 


Bu örneğimizde Silindi kolonu 1 yani true olan ve silen kolonunun Mustafa BÜKÜLMEZ olduğu bütün kayıtları silinmemiş olarak güncelledik. Bunu sağlayan şey aradaki " AND " dir. AND " ve " anlamına gelir ve işlemin yapılması için iki şartında sağlanması gerekir. Yan hem Silindi kolonu true olacak hemde Silin kolonu Mustafa BÜKÜLMEZ olacak. Bu iki şart sağlanıyorsa güncelleme yapılır sağlamıyorsa yapılmaz.


UPDATE [dbo].[Kategoriler]

   SET [Silen] = ''

      ,[Silme_Tarih] = '20000101'

      ,[Silindi] = 0

 WHERE Silindi = 1 or Silen = 'Mustafa BÜKÜLMEZ' 


Bu örneğimizde de iki şartımız var fakat arada " OR " var bu da " veya " anlamına gelir. Silindi kolonu true olan YADA Silen kolonu Mustafa BÜKÜLMEZ olan bütün kayıtlar güncellenecektir.


Birinci örnekteki işlem ile ikinci örnekleri işlemde güncellenen kayıt sayıları farklıdır. İkinci örnekte daha fazla satır güncellenir. Çünkü şartı sağlayan daha fazla kayıt olacaktır.


Şimdi bir örnek daha yapalım ve bu sefer ikisinide kullanalım.


UPDATE [dbo].[Kategoriler]

   SET [Silen] = ''

      ,[Silme_Tarih] = '20000101'

      ,[Silindi] = 0

 WHERE Silindi = 1 and ( Silen = 'Mustafa BÜKÜLMEZ' or Degistiren = 'Mustafa BÜKÜLMEZ' or Kaydeden='Mustafa BÜKÜLMEZ')


Bu örneğimizde hem AND hemde OR kullandık ama dikkat ettiyseniz OR komutları parantez içerisindedir. Eğer OR'ları paranteze koymazsak. Silindi ve Silen şartlarının ikisi yada diğerlerinin şartına bakacaktır. Biraz daha açarsak.


Biz burada yapılmasını istediğimiz işlem;


Silindi 1 ve diğerlerinden herhangi biri Mustafa BÜKÜLMEZ ise güncellemeyi yap değilse yapma. Yani bir kaydın Kaydeden, Değiştiren ve Silindi kolonları Mustafa BÜKÜLMEZ olsa dahi eğer Silindi 1 değilse işlem yapılmaz.


Bu dersimizde bu kadar arkadaşlar diğer derslerimizde görüşmek üzere.
http://mustafabukulmez.com/

0 Yorum: