sysobjects Tablosu Obje tipleri
C = CHECK constraint
D = Default or DEFAULT constraint
F = FOREIGN KEY constraint
L = Log
FN = Scalar function
IF = Inline table-function
P = Stored procedure
R = Rule
PK = PRIMARY KEY constraint (type is K)
RF = Replication filter stored procedure
S = System table
TF = Table function
TR = Trigger
U = User table
UQ = UNIQUE constraint (type is K)
V = View
X = Extended stored procedure
//U kulanıcı tabloları
SELECT * FROM sysobjects WHERE (xtype = 'U')
//TR trigger
SELECT * FROM sysobjects WHERE (xtype = 'TR')
//P trigger
SELECT * FROM sysobjects WHERE (xtype = 'P')
//anahtar sahaların gösterimi
sp_MStablekeys [tbl_table]
//sql servardan excele bilgi atmak
sp_makewebtask @[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]putfile = N'C:\WebPage3.xls',
@[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]='Select * from [tbl_table] '
CREATE TRIGGER TR_Deneme ON dbo.Deneme
FOR INSERT,UPDATE
AS
DECLARE
@vTemp1 VARCHAR(25),
@vTemp2 VARCHAR(25),
@vTemp12 VARCHAR(50),
SELECT @vTemp1 = Temp1 , @vTemp2 = Temp2 FROM inserted
SET @vTemp12 = @vTemp1 + @vTemp2
UPDATE Deneme SET Temp12 = @vTemp12
WHERE @vTemp1 = Temp1
AND @vTemp2 = Temp2
Bu örnekte görüldüğü gibi trigger tek kayıt eklendiğinde bu işlemi yapacaktır ve doğru çalışacaktır. Oysa birden fazla kayıt ekleme yaptığınızda ise sadece son kayıdın Temp21 alanı değişecektir.
Birden fazla kayıt ekleme olduğunda tetikleyicinin çalışması için :
Örnek 2
--------------------------------------------------------------------------------
CREATE TRIGGER TR_Deneme ON dbo.Deneme
FOR INSERT,UPDATE
AS
UPDATE d SET d.Temp12 = i.Temp1 + i.Temp2
FROM Deneme d,inserted i
WHERE d.Temp1 = i.Temp1
AND d.Temp2 = i.Temp2
Yukarıdaki yapı birden fazla kayıt eklendiğinde herbir kayıt için tetikleyicinin doğru çalışmasını sağlayacaktır.
inserted tablosu üzerinden ana tabloya inner join kurarak sorunu çözebiliriz. Yani birden fazla kayıt ekleme olması düşünülen tablolardaki tetikleyiciler için inserted tablosundan değişkenlere değer atamak yerine update query içinde inserted tablosu üzerinden join kurarak ve yapılacak işlemleri T-SQL kodlarıyla değil SQL kodlarıyla yaparak her bir eklemede tetikleyicinin çalışması sağlanabilir.Daha karmaşık yapılarda IF yerine CASE WHEN <değişken>"Oparatör"<Değer> THEN <Sonuç> ELSE <Sonuç> END kullanarak çözebilirsiniz. Daha da karmaşık yapılar için daha çok SQL komutu kullanmak gerekebilir.
__________________
SusKun ve Sessiz Mürekkep...
Kullanıcı imzalarındaki bağlantı ve resimleri görebilmek için en az 20 mesaja sahip olmanız gerekir ya da üye girişi yapmanız gerekir.