Konuyu Oyla:
  • Derecelendirme: 4/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Kaydetme Koşullarını Transactionda Kontrol Etme
#1
Merhabalar şöyle bir şey denedim ve bana çalışıyor gibi geldi. Hiç deneyen arkadaş varmı diye sorayım dedim. Veriyi kaydetmeden önce Transaction açıyorum ve Insert yaptığım kaydı SQL ile tekrar çekerek istediğim alanlar dolumu diye kontrol ediyorum değil ise rollback transaction yapıyorum. Aşağıdaki kod çalışıyor SQL2012 de ve kayıt işlemini kaydetmiyor. Eğer 'KategoriAciklama' alanını doldurursam kaydediyor.

Örnek SQL:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
BEGIN TRANSACTION;

INSERT INTO Kategori(KategoriAdi,KategoriAciklama) VALUES ('Test1','')

IF (SELECT Count(*) FROM Kategori WHERE KategoriAdi = 'Test1' AND  KategoriAciklama = '') >0 
	ROLLBACK TRANSACTION
ELSE
	COMMIT TRANSACTION;


Uygulamasında bu şekilde bir kontrol kullanan arkadaş varsa avantaj dezavantajlarını yazabilirmi.
WWW
Cevapla
#2
Normalde INSERT'in sağlamasını yapmak gereksiz olsa gerek. Ama arkada tarafta trigger gibi şeylerle iptal olma durumu varsa ayrı.

Diğer yandan tek satırlık transaction'un çalışmamış satırını rollback yapmak zaten gereksiz. İşlem zaten başarısızsa geri alman gereken bir şey de yok demektir. Eğer kod bu kadarsa tabi.

Ayrıca COUNT(*) yerine EXISTS her zaman daha iyidir. Biri sona kadar tümünü sayar, diğeri ilkini bulunca durur.
Cevapla
#3
Bu zaten kodda tercih edeceğim bir SQL değil. Aslında burada varmak istediğim şey şu. Benim kodumdan bağımsız bir kişi ben insert işlemini yapmadan önce benim kontrollerimin dışında bir kontrol eklemek istiyor diyelim. Ben transactionu açıcam benim kontrollerimden geçtikten sonra örnek SQL deki gibi bir Select yada Exist her neyse çektikten sonra olumsuz bir dönüş oldu ve ben buna göre transactionu rollbacke düşürücem.

Böyle bir kullanım deneyen oldumu diye soruyorum.
WWW
Cevapla
#4
@witalihakko senin kodundan bağımsız insert işlemi yaptırıyorsan bu kontrolleri trigger içinde yapabilirsin veya şöyle bir durum mu var encrypt'li bir stored procedure'un var ve bunu dış dünyaya açtın (böyle bir durum varsa kesinlikle önermem şahsen web api servis datasnap vs.. olmalı). Dışardan erişen kişi sp'yi tetiklediğinde gerekli alanların set edilip edilmediğini kontrol etmek istiyorsan bunu en başta parametreleri çekerken yapman gerekir zaten.
if IsNull(@AccCode,'')=''
Begin
set @ErrMsg = 'Accode must be filled pls check!!'
return
End
gibi. Hatta bu gibi durumlar için exception throw edebilirsin.
İmam Süleyman Yakub <--> Molla Mustafa Mansur
Evlatlarım!
Cismanımız TÜRK ruhumuz ise İSLAM.
Bu yolda daim olalım her an.
Cevapla
#5
Benim kodumdan bağımsız insert işlemi yapmıyor. Ben transaction açıyorum bir takım kontrollerden sonra insert işlemini yapıyorum.

Sonra bir store prosedure tetikliyorum. Bu store prosedure de kullanıcıya diyorumki eğer senin benim konrollerim dışında bir kontrolün varsa buraya ekle. Prosedure kayıt ile ilgili uniq değerleri parametre olarak veriyorum.

Kullanıcı kontollerini yapıyor. Eğer kontollerinde bir hata varsa bana hata mesajını gönderiyor. Bende diyorumki eğer procedure de hata mesajı varsa rollback yap hata mesajını göster. Kayıt işlemini yapma.

Burada hiç kimse kullanıyor mu böyle bir method, avantajları dezavantajları nedir diye sordum. Bu şekilde kullanan kimse yok sanırım. Konuyu da pek anlayan olmadı dönen cevaplardan anladığım kadarıyla. Neyse olur bazen böyle şeyler Smile
WWW
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Çözüldü Ado sorguda time bilgisini tamsayı olarak kaydetme cinarbil 3 2.398 08-08-2020, Saat: 10:54
Son Yorum: Bay_Y
  veri aktarımı esnasında kontrol denizfatihi 6 4.256 18-10-2019, Saat: 23:53
Son Yorum: denizfatihi
  [ ÇÖZÜLDÜ ]MSSQL VeriTabanına Tarih Kaydetme Hatası theSinan 7 7.932 04-09-2019, Saat: 10:57
Son Yorum: theSinan
  MS SQL Server üzerinden Diskte bir tablonun varlığını kontrol eden fonksiyon adelphiforumz 0 1.576 13-03-2019, Saat: 16:22
Son Yorum: adelphiforumz
  SQl Server içinde değere göre kontrol yapmak Bay_Y 6 4.985 22-08-2018, Saat: 23:34
Son Yorum: Bay_Y



Konuyu Okuyanlar: 1 Ziyaretçi