這一節比較簡單了,主要是講如何在SQLCLR下設計觸發器。在SQLServer2005裡分兩種觸發器,DDL和DML兩種觸發器。DDL觸發器是響應CREATE、ALTER 和 DROP 開頭的語句。我們常用的是DML觸發器,這一類觸發器響應當數據庫中發生數據操作包括表或視圖中修改數據的 INSERT 、UPDATE 或 DELETE 。
對於.Net來講觸發器也是方法,在上方標注[Microsoft.SqlServer.Server.SqlTrigger]標簽(只我這樣翻譯)。
我們看一個小例子
using System;
using System.Data;
using System.Data.Sql;
using Microsoft.SqlServer.Server;
using System.Data.SqlClIEnt;
public partial class Triggers
{
//Name觸發器的名字
//Target觸發器對應表
//Event可以是{ FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] }
[Microsoft.SqlServer.Server.SqlTrigger(Name = "NameInfoTrigger", Target = "NameInfo", Event = "FOR UPDATE")]
public static void GetChange()
{
using (SqlConnection cn = new SqlConnection())
{
cn.ConnectionString = "context connection=true";
cn.Open();
using (SqlCommand cmd = cn.CreateCommand())
{
cmd.CommandText = "insert into ChangeHistory select b.name + '->' + a.name,getdate() from INSERTED a JOIN DELETED b ON a.id = b.id";
SqlContext.Pipe.ExecuteAndSend(cmd);
}
}
}
}
右鍵部署
數據庫裡的兩張表
我執行兩條UPDATE語句
update [NameInfo] set [name]='David' where id=1
update [nameinfo] set [name]='Fan' where id=2
結果
再執行兩條
update [NameInfo] set [name]='*David*' where id=1
update [nameinfo] set [name]='*Fan*' where id=2
再看結果
題外話:上午比較不忙,隨手寫了第三篇。都這個時候了公司領導層還在想搞什麼視頻分享,國內的視頻分享類網站已經倒了一批又一批了,僅有一些苟活於世,表面大紅大紫的日子也未必好過,VC哪能那麼容易就掏錢出來給你燒,哎!最近比較郁悶,忙完手上這點活,想換份工作了。