這一節比較簡單了,主要是講如何在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再看結果