Clear        


                
                    -- TRANSACTIONS --
-- begin tran (veya begin transaction)
-- commit tran (veya commit transaction)
-- rollback tran (veya rollback transaction)
use Filmler
go
truncate table Filmyedek
go
insert into Filmyedek select * from Film
go
select * from Filmyedek
go
begin tran
declare @silinensatirsayisi1 int
delete from Filmyedek where id > 4
select @silinensatirsayisi1 = @@ROWCOUNT
if @silinensatirsayisi1 > 1
begin
	print 'Bir kayıttan (satırdan) daha fazla kayıt (satır) silemezsiniz!'
	rollback tran
end
else
begin
	print 'Silme işlemi başarılı!'
	commit tran
end
go
select * from Filmyedek
go
begin tran
declare @silinensatirsayisi2 int
delete from Filmyedek where id = 4
select @silinensatirsayisi2 = @@ROWCOUNT
if @silinensatirsayisi2 > 1
begin
	print 'Bir kayıttan (satırdan) daha fazla kayıt (satır) silemezsiniz!'
	rollback tran
end
else
begin
	print 'Silme işlemi başarılı!'
	commit tran
end
go
select * from Filmyedek
-- begin tran ile sorguya başladık.
-- begin tran ile başladığımız sorgu sonucu commit tran'i görmeden fiziksel ortama alınmaz.
-- rollback tran yaptığı işlemi (sorguyu) iptal eder yani sorgunun sonucunun fiziksel ortama 
-- yansımasını iptal eder.
-- commit tran ise fiziksel veritabanında işlemi gerçekleştirir.
--------------------------------------------------------------------------------------------------------
go
begin tran
insert into Filmyedek values (3, 'Ejder Kapanı', 2009, 0, 900000)
if (select COUNT(*) from Filmyedek) > 5
begin
	print 'Tablo dolu!, Yeni kayıt ekleyemezsiniz!'
	rollback tran
end
else
begin	
	print 'Ekleme işlemi başarılı!'
	commit tran
end
go
select * from Filmyedek
go
begin tran
insert into Filmyedek values (3, 'Ejder Kapanı', 2009, 0, 900000)
if (select COUNT(*) from Filmyedek) > 6
begin
	print 'Tablo dolu!, Yeni kayıt ekleyemezsiniz!'
	rollback tran
end
else
begin	
	print 'Ekleme işlemi başarılı!'
	commit tran
end
go
select * from Filmyedek
--------------------------------------------------------------------------------------------------------
-- Try Catch
begin transaction myTransaction
begin try
	insert into Film values ('Organize İşler 2', 2018, 1, 8900000) 
	update Oyuncu set adi = 'Ms Zoe' where adi = 'Zoe' and soyadi = 'Saldana'
	insert into Tur (adi) values ('Fantastik')
	delete from Tur where id = 'Fantastik' -- yanlış sorgu, hata verecek, catch'e düşecek, transaction rollback olacak!
	--delete from Tur where adi = 'Fantastik' -- doğru sorgu, transaction commit olacak.
	commit transaction myTransaction
end try
begin catch
	SELECT ERROR_NUMBER() AS ErrorNumber  
        ,ERROR_SEVERITY() AS ErrorSeverity  
        ,ERROR_STATE() AS ErrorState  
        ,ERROR_PROCEDURE() AS ErrorProcedure  
        ,ERROR_LINE() AS ErrorLine  
        ,ERROR_MESSAGE() AS ErrorMessage
	rollback transaction myTransaction
end catch