2008-10-23

Transaction Blok İçerisindeki Lokal Değişkenlerin Durumu

Bana göre uzun sayılabilecek bir aradan sonra tekrardan sizlerleyiz efendim.

Bu sefer lokal değişkenlerin transaction yapısı içerisindeki durumunu hep birlikte inceleyeceğiz. Öncelikle hatırlayamanlar için transaction yapısını hatırlatalım:

BEGIN TRAN
--Ara işlemleriniz
COMMIT TRAN
--yada
ROLLBACK TRAN

Bu hatırlatmadan sonra asıl konumuz olan lokal değişkenlerin transaction yapısındaki durumuna dönelim. Bunun için birbirine çok benzer iki örnek üzerinde duralım:

Örnek-1:
DECLARE @OnlineZiyaretci INT
SET @OnlineZiyaretci = 10

PRINT @OnlineZiyaretci --OnlineZiyaretci değeri 10

BEGIN TRAN
SET @OnlineZiyaretci = @OnlineZiyaretci + 1
PRINT @OnlineZiyaretci --OnlineZiyaretci değeri 11
ROLLBACK TRAN

PRINT @OnlineZiyaretci -- Burdaki değeri tahmin edin?
GO

Örnek-2:
DECLARE @OnlineZiyaretci INT
SET @OnlineZiyaretci = 10

PRINT @OnlineZiyaretci --OnlineZiyaretci değeri 10

BEGIN TRAN
SET @OnlineZiyaretci = @OnlineZiyaretci + 1
PRINT @OnlineZiyaretci --OnlineZiyaretci değeri 11
COMMIT TRAN

PRINT @OnlineZiyaretci -- Burdaki değeri tahmin edin?
GO

Normal şartlarda bir kayıt yada kayıt kümesi için rollback olduğunda o kayıtlar eski haline döner; commit olduğunda ise transaction blok içerisinde aldığı son değerleri alır .
Eminim bir çoğunuz aynı mantıkla @OnlineZiyaretci değişkeninin örnek-1 için 10; örnek-2 için ise 11 alacağını tahmin etmişsinizdir. Kodu denerseniz tahminizde yanıldığınızı; her iki durumda da @OnlineZiyaretci değerinin 11 olduğunu göreceksiniz. Bunun nedeni lokal değişkenlerin Transaction yapısından etkilenmemeleri!

Bir sonraki yazıda görüşünceye dek bol SQL'li günler diliyorum.

Hiç yorum yok:

.::YASAL UYARI::.

©2004-2016 Mehmet GÜZEL, http://www.mehmetguzel.net/ & http://www.mehmetguzel.com/

Site içeriği kaynak gösterilmek koşuluyla yayınlanabilir. Yazılan yazı ve yorumlar sadece yazı ve yorum sahiplerini bağlar.