宁德一中师资:关于触发器的一个问题

来源:百度文库 编辑:神马品牌网 时间:2024/04/29 06:35:30
******************************************************************/
CREATE TRIGGER [affair_read_InsertTrigger] ON dbo.affair_read
FOR INSERT
AS

/* 声明触发器使用的变量 */
DECLARE
@doc_no varchar(30),--邮件发送人
@tcode varchar(250),--邮件阅读人
@Message_ID int,--消息ID
@ename varchar(64), --职工姓名
@ecode varchar(24) --职工代码
/* 开始事务 Remove_TopSubject*/
BEGIN TRAN Remove_TopSubject
/*取出插入记录的相应字段值*/

/*赋值要使用Select*/
Select @doc_no=doc_no From Inserted
Select @tcode=tcode From Inserted
/* 保存插入前保存点,防止出错 */
Save Tran my_Save1

/* 删除T_Sys_Message表的相应消息 */
DELETE FROM T_Sys_Message WHERE Message_ID IN
(SELECT Message_ID FROM (SELECT a.Message_ID FROM T_Sys_Message a,T_Sys_MessageInterface b
WHERE a.Message_ID=b.Message_ID AND a.Takeover_Person=@tcode AND b.Column_Value=@doc_no) AS TMP)
If @@Error = 0
Commit Transaction
Else
Begin
Rollback Transaction my_Save1
Raiserror('数据库错误,请与系统管理员联系',16,1)
End

/*------------------代码结束---------------------*/

1,其中这段:
/* 开始事务 Remove_TopSubject*/
BEGIN TRAN Remove_TopSubject
/*取出插入记录的相应字段值*/
起了什么作用

2,这段里边/*赋值要使用Select*/
Select @doc_no=doc_no From Inserted
Select @tcode=tcode From Inserted
/* 保存插入前保存点,防止出错 */
Save Tran my_Save1
其中Save Tran my_Save1保存点是什么东西?inserted又是怎么回事?
谢高人指点,本人不吝重赏!

建议你买本书看吧。

简单的说,事务就是如果一件事情分成几个步骤,那么使用事务就可以确保这件事情要么全部做完,要么就全部都没做,不存在只做了其中几个步骤的可能。比如银行刷卡,使用事务就可能确保,用户要么就扣了卡上的金额并拿到了钱,要么就拿不到钱而卡上的金额也没扣,不会存在用户没拿到钱却扣了卡上金额的可能。

事务的关键字有
BEGIN TRAN --启动一个事务
Save --在事务中做一个标记,以使Rollback可以回滚到这个保存点而不是撤消整个事务。
Commit --提交,让整个事务所做的事变成事实。
Rollback --撤消,可以返回到一个保存点,也可以撤消整个事务。

inserted --在每次使用insert语句后,MSSQL将刚刚插入的这条记录保存在inserted表中,所以可以查询这个表取得刚刚插入的这条记录。同理deleted表保存的是刚刚删除的记录。