SQL | Triggers

Posted by mezo | Posted in MSSQL | Posted on 19-05-2011-05-2008

3


Merhaba arkadaşlar

Fazla zamanım olmadığı için blogla fazla ilgilenemiyorum  işte o nadir bulduğum zamanlardan birtanesinde daha  yararlı olacağını umduğum bir konu ile sizlerleyim. (TV programı gibi oldu ama idare edin artık :D ) .

Bugün sizlere parmaklarımın yazabildiği kadar trigger anlatmak istiyorum.

Trigger Nedir?  Önce bu soruya çok basit bir bakış açısı ile bakalım yani trigger in türkçe meali ile.  Ne dersiniz ? Evet dediğinizi duyar gibiyim adeta :D   Trigger tetik demektir. Nasıl yani tetik bildiğimiz silahlardaki tetikten işte ;)   Tetik çekildiğinde nasıl silah bir takım işlemler gerçekleşiyor ve kurşun atıyor . Sql dede bazı işlemlerden sonra otomatik olarak başka işlemlerin yapılmasını yani tetiklenmesini isteyebiliriz böyle bir yapıyı Trigger dediğimiz kod parçaları gerçekleştirirler…

Peki Trigger dediğimiz olay nasıl yazılır yada yapılır???

 

Triggerlar, Query ekranında T-SQL kodu ile veya Management Studio ile oluşturulup yönetilebilirler ve  View  ve tablolar üzerinde tanımlanabilir.  CREATE TRIGGER komutunu  kullanabilmek için sysadmin, db_owner veya db_ddladmin  rolüne sahip olmak gerekir.  Bir trigger başka bir tabloya erişecekse bu tablo için de trigger oluşturan kullanıcının erişim izni veya güncelleme izni olması gerekir.

 

Peki trigger ‘ ları ne zaman kullanırız ?

*  Değişiklikleri takip etmek için,

* Birincil anahtar üretmek için,

* Karmaşık iş kurallarını gerçekleştirmek için,

* E-posta atmak gibi olayları otomatik olarak yapmak için,

* Standart hata mesajlarının dışında bir hata mesajı elde etmek için,

* Veritabanı erişimlerini takip edebilmek için,

* Nesnede meydana gelebilecek değişiklikleri takip ve engellemek için kullanabiliriz.

 

Trigger dediğimiz yapı kendi içinde 2 ye tekrar o  bölünenlerden biride  ikiye ayrılır :D çokmu karışık oldu ? :D yani özetle şöyle :

DDL Trigger’lar: Create, Alter ve Drop işlemleri gerçekleştiğinde çalışan trigger’lardır.

DML Trigger’lar: Insert, Update ve Delete işlemleri gerçekleştiğinde çalışan trigger’lardır.

CREATE TRIGGER tetikleyici_adi 

ON tablo_adi

FOR veya AFTER veya INSTEAD OF (INSERT veya UPDATE veya DELETE)

AS Sql ifadeleri

 

After (For) Trigger’ı: After triggerları, kendiyle ilişkili işlem gerçekleştikten hemen sonra ateşlenir.

Veritabanındaki temel işlemler için (ekleme, silme ve güncelleme) After triggerları tanımlanabilir.

Create Trigger Tg_SilinenKayıtlar

On Employees

After Delete

As

Begin

Declare @Ad nvarchar(50)

Declare @CalisanID İnt

Select @Ad=FirstName,@CalisanID=Employees From Deleted

Select CalisanID,Ad+’-Silinmiştir’,GetDate()From Deleted

Insert Into CalisanKayitRapor Values(@CalisanID,@Ad+’- Silindi’,GetDate())

End

Instead Of Trigger’ı: Instead of triggerları, belirlenen işlem gerçekleşirken devreye girer ve kendi içinde tanımlanan komutları icra etmeye başlar. Yani, belirlenen işlemin yerine geçer. Instead of triggerlari işlemlerin arasına girebildiğinden kontrol amaçlı kullanılabilirler. Tıpkı After triggerları gibi temel veritabanı işlemleri için Instead Of triggerları  tanımlanabilir.

Alter Trigger Tg_CalisanKayitRapor 

On Employees

After Insert

AS

Begin

Declare @Ad Nvarchar(50)

Declare @CalisanID int

Select @Ad = FirstName,@CalisanID = EmployeeID From Inserted

 

Insert Into CalisanKayitRapor Values(@CalisanID,@Ad,GetDate())

End

 

INSERT – UPDATE – DELETE

Trigger devreye girdikten sonra Inserted veya Deleted tablolarında yeni eklenen veya silinen kayıtların bir kopyası tutulur.

Trigger Update (ALTER)

CREATE ile oluşturulmuş bir tetikleyiciyi daha sonra üzerinde değişiklikler

yapmak üzere tekrar açmak isteyebilirsiniz. Bunun için, tablonuzda oluşturulmuş bir tetikleyici üzerindeyken sağ tıklayarak açılan menüden Modify komutunu vermeniz gerekir.

 

Trigger Silmek (DROP)

Oluşturulan bir tetikleyiciyi DROP komutuyla ya da tetikleyici üzerinde sağ tıklayarak açılan menüden Delete komutunu vererek silebilirsiniz.

Delete Trigger Tg_CalisanKayitRapor

Trigger Enable ya da Disable

Oluşturulan bir tetikleyici, her zaman aktif durumdadır. Tetikleyiciyle ilgili bir durum oluştuğunda otomatik olarak devreye girer. İstenildiğinde oluşturulan bu tetikleyiciler pasif

hâle getirilebilir. Tetikleyici üzerinde sağ tıklayarak açılan menüde Disable komutunu verdiğinizde tetikleyici pasif hâle gelir.

ALTER TABLE tablo_adi 

DISABLE TRIGGER Musteri_Silme

veya

ENABLED TRIGGER Musteri_Silme

 

Umarım yararlı olur…

 

M.Zeki Osmancık.

 

SQL | Views

Posted by mezo | Posted in MSSQL | Posted on 22-10-2010-05-2008

2



Merhaba arkadaşlar bu yazımızda MSSQL de bulunan View yapısından bahsetmek istiyorum. Bu yazının sonunda View yapısını nasıl yazıldığını ne işe yaradığını öğrenmiş olacaksınız.

View yapılarını bilinenin aksine sadece ihtiyacımız olduğunda kullanmamız işimizi kolaylaştıracağı gibi bizi gereksiz yüktende kurtaracaktır. Yerinde kullanıldığında veritabanında çok daha verimli çalışmalar yapmamızı sağlarlar.

Peki nedir bu view ? View’ler  bir veya birden fazla tablonun istenilen verilerinin bir arada sunulmasını sağlayan tanımlanmış sorgulardır. View leri sanal tablolar olarakda nitelendirebiliriz. Aynı oluşturduğumuz tablolar gibi satır ve sütunlara sahiptir. Birden fazla sütunun birleşerek tek bir komut altında topladığımızı düşünebiliriz. Hatta sadece tek bir tablo ile ilgili bir view oluşturduğumuzda İnsert Update Delete gibi işlemlerinide gerçekleştirebiliriz. View ler için sanal kelimesini kullanıyoruz çünkü üzerinde veri tutmazlar , sadece istenen veriye ulaşılması için bir araçtır aslında. Bir view yazdığımızda ne oluyor acaba ? Bize neler kazandırıyor bir göz atalım.

*İlk olarak birden fazla tablo ile çalışırken gereksiz karmaşadan kurtuluyoruz. Yani ne demek bu ? Biz uzun bir SQL sorgusu yazdığımızda her seferinde bu uzun ve karmaşık kodla uğraşmak yerine bir view işimizi görüyor.

*Bir diğer artısı ise veri ulaşım performansını arttırmak.

*Veri erişimini sınırlamak ve kontrol altında tutmak

View oluştururken dikkat etmemiz gereken hususlar:
Oluşturulan View de;
-Compute ya da Compute By cümleciği,
-Into anahtar sözcüğü,
-Option cümleciği
kullanılamaz.
-View’ler temporary tablo dediğimiz geçici olarak oluşturulan tablolara referans verilemez. Bu tablolardan veri istenemez.
-Order By cümleciği sadece TOP operatörü ile birlikte kullanıldığında kullanılabilir.
-Bir View farklı tablolardan gelen aynı isimlere sahip farklı sütunları içerebilir.
-View’lerdeki sütunlar aritmetik ifadelere sahip olabilir

-Bir view oluşturabilmek için database üzerinde sysadmin (system administrator),  db_owner (database owner), db_ddladmin (data definition language administrator) yetkilerine sahip olmalıyız.

Northwind veritabanını kullanarak örneklerimizi verelim ve bir view nasıl yazılıyor nasıl kullanılıyor görelim ;)

Syntax  olarak

CREATE VIEW [View_Ismi]

AS

SQL Kodları.

Haydi  sizle önce çok basit bir Select sorgusu sonra karışık bir select sorgusu ile örnek verelim.

Birde karmaşık olana bakalım.

Bu kadar uzun bir kodla ( hatta bundan daha uzunda olabilirdi belki ) her seferinde uğraşmak insanı yorabilir karışıklığa ve hatalara olanak sağlar işte bu karışıklık ve hatalara meydan vermemek için View kullanmalıyız diyoruz.

Kodlarla çok güzel yazdık bu View i peki hiç bilgimiz yoksa kod bilmiyorsak olamazmı ?  O zaman ne yapacağız bu View denen zıkkımı yaratmak için çok basit :

Öncelikle Object explorer penceresinde database imiz içersinde bulunan klasörlerden Views klasörüne sağ tık yapıyoruz ve New View diyoruz.

Ardından bizden hangi tablolarla alakalı çalışma yapmak istediğimizi soruyor bizde istediğimiz tabloları seçiyoruz.

Seçtikten sonra zaten biraz önce uzun uzun yazdığımız kodları bizlere otomatik olarak yazılmış halinin canlı halini getiriyor ekrana tek yapmamız gereken kaydetmek :D

Basit olarak bir view oluşturma işlemi bu kadar arkadaşlar bir başka makalemizdede bu View in içindekine  , dibindekine , altında yatan koca ayzberge (iceberg) bakacağız

Görüşmek üzere…