Sayfalar

23 Mart 2009 Pazartesi

SQL Server'da Trigger

3 çeşit trigger vardır:
1 - Insert Trigger (Tabloda ekleme işlemi olduğu anda)
2 - Delete Trigger (Tabloda silme işlemi olduğu anda)
3 - Update Trigger (Tabloda güncelleme işlemi olduğu anda)

Trigger tetikleyici demektir. Adındanda anlaşılacağı gibi tabloda insert (ekleme), delete(silme) ve update (güncelleme) işlemleri yapıldığı anda yada sonrasında çalışmasını istediğiniz komutları triggerlar sayesinde çalıştırırız. Triggerlar 2 farklı tablo kullanmaktadır. Insert(ekleme) işlemleri için inserted tablosu, delete(silme) işlemleri için deleted tablosu kullanılır. Bir kayıt güncellenirken ise ilk önce deleted tablosunda silinen veri, inserted tablosunda da eklenen veri tutulur.(Yani deleted tablosunda eski veri inserted tablosunda yeni veri)

Konuyu örneklerle inceleyelim.

Trigger eklemek istediğimiz tabloyu solumdaki + işaretinden açıyoruz trigger seçeneğinin üzerine gelip sağ tıklayarak new trigger seçeneğini seçiyoruz.

CREATE TRIGGER <Schema_Name, sysname, Schema_Name>.<Trigger_Name, sysname, Trigger_Name>
ON <Schema_Name, sysname, Schema_Name>.<Table_Name, sysname, Table_Name>
AFTER <Data_Modification_Statements, , INSERT,DELETE,UPDATE>
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for trigger here
END
GO

geliyor. Şimdi gerekli alanları nasıl dolduracağımızı ihtiyaçalarımıza göre belirleyeceğiz.

12 Mart 2009 Perşembe

Tabloda Identity Değerini Düzeltme

Örneğin bir tablonuzda otomatik artan ID isimli bir kolonunuz var ve bu tablodaki kayıtlarınızdan bir kaçını veya tümünü sildiğinizde ID nin 1 den başlamak yerine daha büyük bir sayıdan başladığını yada 1,2,3,4 diye giderken sildiğiniz satırlar 5,6,7 ise yeni kayıdın 8 den başladığını görürsünüz.Siz tekrar 5 den devam etmek istiyorsanız aşağıda vermiş olduğum örneği kullanabilirsiniz. 4 örnektir kaçıncı kayıttan başlamasını istiyorsanız o numarayı vermeniz gerekmektedir.

USE DATABASENAME
DBCC CHECKIDENT (@tablename, RESEED, 4)--4:en son kalan id no (devam etmesi istenen id numarası (5 den devam edecektir))
DBCC CHECKIDENT (@tablename)

/*SP ÖRNEĞİ*/
CREATE PROCEDURE UpdateIdentity
@tablename nvarchar(255)--tabloAdı parametre olarak geliyor
AS
DECLARE @ident_seed int
SET @ident_seed = IDENT_SEED(@tablename)
DBCC CHECKIDENT (@tablename, RESEED, @ident_seed)
DBCC CHECKIDENT (@tablename)
GO

11 Mart 2009 Çarşamba