SQL — BEGIN TRAN, COMMIT TRAN, ROLLBACK TRAN, IF, @@ERROR, PRINT, UPDATE, ALTER TABLE

Seher Aydın
4 min readJul 23, 2024

--

Bugün SQL Server ‘ da işlem başlatmayı ve bu işlem gerçekleşirken başımıza gelecek hatadan nasıl kurtulacağımızı konuşacağız.

Başlıkda da görmüş olduğunuz yukarıdaki kavramları uygulayarak örnekler gerçekleştireceğiz.

Tek tek yukarıdaki kavramların ne anlama geldiğini örnek vermeden önce inceleyelim:

BEGIN TRAN: SQL Server’ da bir işlemi başlatmak için kullanılır.
Söz dizimi:

BEGIN TRAN
-- Bir veya daha fazla SQL komutu
COMMIT TRAN

COMMIT TRAN: Bu komut işlemi tamamlar ve yapılan değişikliği kalıcı hale getirir.

ROLLBACK TRAN: İşlem başladıktan sonra herhangi bir hata ile karşılaşılırsa yapılan işlemi geri almamızı sağlayan komuttur.

IF @@ERROR <> 0
BEGIN
ROLLBACK TRAN
PRINT 'Hata oluştu, işlem geri alındı.'
END
ELSE
BEGIN
COMMIT TRAN
PRINT 'İşlem başarıyla tamamlandı.'
END

IF: Herhanfgi bir koşul yazmak için kullanılır.

@@ERROR: Hata yönetimi için kullanılan değişkendir. İşlem sürecinde herhangi bir hata oluşursa @@ERROR değişkeninin içerisinde hata kodu atanır. Eğer hata kodumuz sıfır (0) ise işlem başarılı bir şekilde gerçekleşmiş demektir.

PRINT: Ekrana yazdırmak istediğimiz ifadeleri bu komut ile yazdırabiliriz.

UPDATE: Bir tablodaki güncelleme işlemlerini bu komut ile gerçekleştiririz.

ALTER TABLE: Tabloda sütun ismi değiştirmek, sütun eklemek, sütun silmek gibi işlemler bu komut ile yapılır.

PROBLEM:

Customer adında bir tablomuz olsun. Bu tabloda müşteriye ait bilgiler bulunuyor. Biz bu müşterinin siparişlerinin ve ödemesinin durumunu değiştireceğiz. Sipraiş durumu tamamlanan müşteri için “tamamlandı”; ödeme durumu tamamlanan müşteri için ise “kabul edildi” ifadelerini uygun sütunlar oluşturup ekleyeceğiz.

Aşağıda tablonun son hali bulunmaktadır. İlk olarak Customer tablosunda Siparis_Status ve Odeme_Status sütunları yoktu bunları ALTER TABLE komutu ile ekledik. Daha sonra hata kontrolü de yapan bir işlem başlattık. Eğer sipariş durumuna ve ödeme durumuna değer atarken hata yaparsa PRINT ile “Hata oluştu, işlem geri alındı.” yazdık. Başarılı olduysa da
“İşlem başarıyla tamamlandı.” yazdık ekrana.

Şimdi yukarıda bahsettiğim adımları tek tek yapacağız fakat öncesinde yukarıdaki tabloda da gördüğünüz üzere zaten Siparis_Status ve Odeme_Status kolonları var. Bunları alıştırma olması açısından da sütun silme işlemini yaparak kaldıracağız. Sonra ise problemi adım adım çözeceğiz.

Customer tablomda Siparis_Status ve Odeme_Status kolonlarını sizlere de uygulatmak amacıyla silip yeniden oluşturacağım. Bunun için ALTER TABLE komutunu kullanıyorum.

--Siparis_Status sütununu Customer tablosundan sile
Alter Table Customer Drop Column Siparis_Status

Silme işleminden sonra Customer tablomuz aşağıdaki gibidir:

Daha sonra Odeme_Status sütununu da tablomuzdan aynı şekilde silelim

--Odeme_Status sütununu Customer tablosundan sile
Alter Table Customer Drop Column Odeme_Status

Tablomuzdan Odeme_Status sütununu da sildikten sonra Customer tablomuzun son hali aşağıdaki gibi olacaktır.

Şimdi adım adım problemi çözelim:

Yapılacaklar:

1- Siparis_Status ve Odeme_Status sütunlarını ekleyeceğiz.

2- Tablomuzda oluşturduğumuz Siparis_Status sütununa ‘tamamlandı’; Odeme_Status sütununa ise ‘kabul edildi’ değerlerini gireceğiz. Hepsine girmemize gerek yok bu aşamada.

3- İşlemi başlattıktan sonra herhangi hatalı bir değişiklik yani yarım bir değişiklik kaydedilmemesi için öncesinde hata var mı yok mu kontrol edeceğiz.

4- Eğer hata varsa “Hata oluştu, işlem geri alındı.” mesajını kullanıcıya gösterip işlemi geri alacağız.

5- Eğer hata yoksa “İşlem başarıyla tamamlandı.” mesajını kullanıcıya gösterek işlemi kalıcı olarak kaydedeceğiz.

Yukarıdaki maddeleri tek tek gerçekleştirelim:

1- Siparis_Status sütununu ekleyelim (ALTER TABLE):

Alter Table Customer ADD Siparis_Status VARCHAR(50)

Daha sonra Odeme_Status sütununu aynı şekilde ekleyelim (ALTER TABLE):

Alter Table Customer ADD Odeme_Status VARCHAR(50)

Tablonun artık son hali aşağıdaki gibidir:

Aşağıdaki maddeleri tek seferde tamamlayacağız.

2- Tablomuzda oluşturduğumuz Siparis_Status sütununa ‘tamamlandı’; Odeme_Status sütununa ise ‘kabul edildi’ değerlerini gireceğiz. Hepsine girmemize gerek yok bu aşamada.

3- İşlemi başlattıktan sonra herhangi hatalı bir değişiklik yani yarım bir değişiklik kaydedilmemesi için öncesinde hata var mı yok mu kontrol edeceğiz.

4- Eğer hata varsa “Hata oluştu, işlem geri alındı.” mesajını kullanıcıya gösterip işlemi geri alacağız.

5- Eğer hata yoksa “İşlem başarıyla tamamlandı.” mesajını kullanıcıya gösterek işlemi kalıcı olarak kaydedeceğiz.

-- işlemi başlat
BEGIN TRAN

-- Müşteri sipariş bilgilerini güncelle
UPDATE Customer
SET Siparis_Status = 'tamamlandı'
WHERE ID = 1

-- Müşteri ödeme bilgilerini güncelle
UPDATE Customer
SET Odeme_Status = 'kabul edildi'
WHERE ID = 2

-- hata kontrolü, @@ERROR=0 ise başarılı
IF @@ERROR <> 0
BEGIN
ROLLBACK TRAN -- işlemi geri al
PRINT 'Hata oluştu, işlem geri alındı.'
END
ELSE
BEGIN
COMMIT TRAN -- işlemi kalıcı olarak kaydet
PRINT 'İşlem başarıyla tamamlandı.'
END

Yukarıdaki kodu çalıştırdığımızda aşağıdaki mesajı alırız.

Ve artık Customer tablomuza aşağıdaki gibi Odeme_Status’ e ve Siparis_Status’e istediğimiz değerleri atamış olduk.

--

--

Seher Aydın
Seher Aydın

No responses yet