Respond needs javascript to run. To find out more click here
sql de başka tablodan trigger ile update » Serdar Demir
RSS
 

Posts Tagged ‘sql de başka tablodan trigger ile update’

SQL Server İzleme Profiler-DDL Trigger

14 Eki

SQL Profiler:

SQL server 2000 enterprise manager içerisinde de bulunan yapının güncellenmiş hali 2005 ve sql 2008 içinde yer almaktadır.

Sql Profiler olayları analaysis service ile beraber kaydedip izleyebilir yani siz veritabanı üzerinde hangi işlemler yapılmış hangi sorgular çalıştırılmış kim yapmış öğrenebilirsiniz. Hangi veritabanının sistemi yavaşlattığını hatta kitlenmeye sebep olduğunu grafiksel olarak izleyebilir xml olarak kaydedebilirsiniz.

Şimdi Profilerı çalıştıralım ve çıktısını xml olarak kaydedelim

pro1

Fıle menüsünden new trace diyoruz

pro2

Veritabanınız üzerinde birkaç işlem yapın yazmış olduğunuz sorguları aşağıdaki ekranda göreceksiniz

trace

son işlem olarak stop trace diyoruz file/save as seçeneğinden TraceXML File seçiyoruz

DDL TRIGGER:

SQL Profiler:

SQL server 2000 enterprise manager içerisinde de bulunan yapının güncellenmiş hali 2005 ve sql 2008 içinde yer almaktadır.

Sql Profiler olayları analaysis service ile beraber kaydedip izleyebilir yani siz veritabanı üzerinde hangi işlemler yapılmış hangi sorgular çalıştırılmış kim yapmış öğrenebilirsiniz. Hangi veritabanının sistemi yavaşlattığını hatta kitlenmeye sebep olduğunu grafiksel olarak izleyebilir xml olarak kaydedebilirsiniz.

Şimdi Profilerı çalıştıralım ve çıktısını xml olarak kaydedelim

pro1

Fıle menüsünden new trace diyoruz

pro2

Veritabanınız üzerinde birkaç işlem yapın yazmış olduğunuz sorguları aşağıdaki ekranda göreceksiniz

trace

son işlem olarak stop trace diyoruz file/save as seçeneğinden TraceXML File seçiyoruz

DDL TRIGGER:

Yeni bir özellik olup veritabanındaki nesne hareketlerini bildirmek için kullanılır. önceki derslerde anlattığımız triggerlardan farklıdır.

Bu trigger bir tablonun silinmesi oluşturulması gibi işlemleri izlememizi sağlar.

Kullanılan DDL ifadelerinde create table drop table veya update statics devreye giren DDL trigger ile yönetimsel işlerde takip edilir.

CREATE TRIGGER:

Create trigger tabloekle

on database

for CREATE_TABLE

……

DDL işlemini izlemek içinse

DDL_DATABASE_LEVEL_EVENTS ifadesinden yaralanılır

EventDate:

standart trigger tablolar üzerinde işlem yapmak için inserted ve deleted adında tablolar oluşturuyordu DDL trigger ise bunları oluşturmaz. Bunun yerine EventData fonksiyonunu kullanır.

Şimdi bir uygulama yapalım;

Query Analayser a

create trigger tabloekle

on database

For Create_table

as

declare @verial XML

declare @veritaban nvarchar(1000)

set @verial=eventdata()

set @veritaban=convert(nvarchar(1000))

@verial.query(‘data(//DatabaseName)’))

select @verial,@veritaban

Şimdi bir tablo oluşturalım sorgu çalıştığında tetikleyici devreye girecek ve xml olarak bize rapor suncak :)


Oluşturduğumuz Trigger’ı Veritabanımızın altında Programmability -> Database Triggers altında görebilirsiniz

Test için basit birer CREATE, ALTER ve DROP işlemlerinin sonucu :


 
1 Comment

Posted in Sql Server

 

Sql trigger nedir resimli anlatım

01 Ağu

Sql trigger

Trigger nedir?

Trigger tetikleyici anlamına gelir programlarımızda belirli bir işlem gerçekleştiğinde programımızı tetiklemeye yarar veya tablolar arası veri bütünlüğünü korumak için kullanılırlar. Aslında triggerlar bir store proceduredür fakat farkı kendiliğinden çalışmasıdır.

Triggerlarda ya hep ya hiç mantığı vardır yani program zorlukla karşı karşıya kaldıgında bütün işlem geri döner. Örneğin atmden para çekiyorsunuz parayı aldığınızda sizin hesabınızdan para düşülmemişse işlemin yarısında elektrik kesilmişşe vb. Olaylarda yapılan bütün işlemler iptal olur geri döner (transaction konusunda ayrıntılı anlatcağım)Bu işlemi rollback transaction ifadesi ile gerçekleştirir trigger tanımlamamız içinde transaction blogu olması gerekir.

Rollback transaction ifadesini minimum düzeyde kullanmamız önerilir çünkü büyük veritabanlarında bu işlemlerin yapılması çok büyük yük oluşturur buda performasın düşmesine sebep olur. Triggerlarla silme, güncelleme, ekleme işlemlerini yapabiliriz. Yani bir tabloda birden fazla trigger tanımlayabiliriz.

Trigger tanımlama:

Tabloyu seçip all tasks/manage triggers diyerek bize aşağıdaki gibi hazır bir şablon oluşturur.

Bu şablonu kendi triggerımıza göre tasarlayacağız. Triggerımıza bir isim veriyoruz daha sonra for insert,delete,update işlemlerinden  birini seçiyoruz(trigger seçtiğimiz işlem gerçekleştiğinde devreye girecek)

Delete triggerı :

Bu trigger tablodan silme işlemlerinde tetiklenir ve silinen verinin bir kopyasını deleted tablosunda saklar bunu  Örnek bir trigger oluşrarak anlatalım

Veritabanımızdan veri silmek istendiğinde hem silme işlemini önleyelim hemde silemezsin mesajı yayınlayalım.

Create trigger silme

on serdar for delete

as

if(select count(*) from deleted)>0

begin

raiserror(‘ Oops Bu tablodan veri silemezsiniz !!’,16,1)

//bu sayılar ne diye aklınıza bi soru gelebilir billiyodum ama unuttum gereksiz bişeydi

Rollback transaction

Return

End

Bu kodu üstteki formda veya query analayser da çalıştırdığımızda trigger oluşturuluyor bunu üstteki resimde new yazan açılır listede şeklinde trigger oluşturduğunu görürüz.

Gelelim triggerımızı denemeye tablomuzdan adı serdar olan kaydımızı silmeye çalışalım.

Delete from serdar where isim=’serdar’

Bu hata mesajı ile karşılaşıyoruz.

Insert triggerı:

Bir tablo içerisine veri eklemek için insert ifadesi kullanılır. Bu trigger insert işlemi gerçekleştiğinde inserted diye sanal bir tablo oluşturur ve ana tabloya eklenen veri inserted tablosuna da eklenir. İnsert triggerını bir uygulama ile açıklayalım: Sql final sınavında soruyu yanlış anlayıp yazdığım triggera benzer bir örnek J  Diyelim ki internetten satiş yapan bir firmayız satılan mallar giriş yapılan mallar stok durumunun tutlduğu tablolarımız var örneğin stok tablomuzda stok miktarı satılan  adet ve kalan adetleri saklıyoruz diger tablomuz ise satış tablosu bu tabloda satılan malın adı fiyatı vb. özellikler tutuluyor şimdi satış tablosuna bir kayıt girildiğinde benim stok tablomda satılan adetin artmasını ve elimde kalan miktarın azalmasını istiyorum bu beni iki tabloyada kayıt yapmaktan kurtaracak  gelelim triigera;

Create trigger stok_guncelle

On satis

For instert as

Update stok set stok.satilan=stok.satilan+1 from stok inner join inserted on stok.urun_id=inserted.urun_id

// biraz açıklama ekleyelim bir mal sattıgımız zaman diyelim mp3 çalar id si 1 olsun şimdi ben satış tablosuna bir kayıt eklediğimde stok tablosunda satilan sütununun  değeri 1 artacak kalan 1 azalacak (bu bir azalma kısmını Formula yoluyla tablo dizayn kısmında Formula alanına (stok-satilan) yazarak sağlıyoruz)

Aynı işlemi ürün aldığımızda da kullanabiliriz gördüğünüz gibi sadece trigger oluşturuyoruz ve otomatikmen olay gerçekleştiğinde devreye giriyor.

Son trigger çeşidimiz update triggerı:

Bu triggerımızı da delete triggerı gibi basit bir örnekle açıklayalım bu tablomuzun güncellenmesini önleyelim

Create trigger guncelle

On satis

For update as

İf update(numara)

Begin

Begin transaction

Raiserror(‘Güncelleme yapılamaz’,10,1)

Rollback transaction

Return