SQLCLR(三)触发器
这一节比较简单了,主要是讲如何在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
再看结果
?
 ?
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|