/******************************************************************
** 文件名:
** Copyright (c) 2003-2004 *********
** 创建人:
** 日 期:2004-5-26
** 修改人:
** 日 期:
** 描 述:
** affair_read表的一个插入触发器,用于将T_Sys_Message表的相应消息删除
** 版 本:v1.0
**----------------------------------------------------------------------------
******************************************************************/
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
/*------------------代码结束---------------------*/
/******************************************************************
** 文件名:
** Copyright (c) 2003-2004 *********
** 创建人:
** 日 期:2004-5-26
** 修改人:
** 日 期:
** 描 述:
** private_affair表的一个修改触发器,用于向T_Sys_Message表插入一条消息
** 版 本:v1.0
**----------------------------------------------------------------------------
******************************************************************/
CREATE TRIGGER [private_affair_UpdateTrigger] ON dbo.private_affair
FOR UPDATE
AS
/* 定义触发器使用的变量 */
DECLARE
@creator varchar(24),--邮件发送人
@receiver varchar(250),--邮件接收人,可能多个ecode,用逗号连接
@starting_date Datetime,--邮件发送时间
@title varchar(60), --邮件标题
@ename varchar(64), --职工姓名
@ecode varchar(24), --职工代码
@affair_id varchar(20), --邮件编号
@procedure Char(1) --邮件状态
/* 声明临时表 */
DECLARE @tmp table
(
[Messagg_Name] [nvarchar] (1000) ,
[Issue_Person] [nvarchar] (255) ,
[Takeover_Person] [varchar] (24) ,
[Message_Date] [datetime] ,
[Messagg_Type] [smallint] ,
[Marker] [varchar] (20) ,
[Remark] [nvarchar] (500)
)
/*取出插入记录的相应字段值*/
/*Update,Delete操作共用系统提供的Deleted表,Insert操作使用系统提供的Inserted表*/
SELECT @affair_id=affair_id From Deleted
SELECT @creator=creator FROM private_affair WHERE affair_id=@affair_id
SELECT @receiver=receiver FROM private_affair WHERE affair_id=@affair_id
SELECT @starting_date=starting_date FROM private_affair WHERE affair_id=@affair_id
SELECT @title=title FROM private_affair WHERE affair_id=@affair_id
SELECT @procedure=[procedure] FROM private_affair WHERE affair_id=@affair_id
/* 开始事务 */
BEGIN TRAN Remove_TopSubject
/* 保存插入前保存点,防止出错 */
Save Tran my_Save1
/* 分拆邮件接收人 */
DECLARE
@Counter Smallint, --计数器
@Separator char(1) --分隔符
SELECT @Counter=0
SELECT @Separator=','
/* 获取发送人职工姓名 */
SELECT @ename=ename FROM ecode WHERE ecode=@creator
/* 判断本邮件是否已经在消息表中 */
IF (NOT EXISTS(SELECT 1 FROM T_Sys_MessageInterface WHERE Column_Value=@affair_id)) AND (@procedure=1)
BEGIN
WHILE len(@receiver)>0
BEGIN
SELECT @ecode=substring(@receiver,0,CHARINDEX(@Separator,@receiver))
/* 插入数据到T_Sys_Message表 */
INSERT INTO T_Sys_Message(Messagg_Name,Issue_Person,Takeover_Person,Message_Date,Messagg_Type)
VALUES(@title,@ename,@ecode,@starting_date,'10')
/* 将关键字值插入T_Sys_MessageInterface表 */
INSERT INTO T_Sys_MessageInterface(Message_ID,Table_Name,Column_Name,Column_Value)
VALUES(@@IDENTITY,'affair_read','doc_no',@affair_id)
SELECT @Counter=@Counter+1
SELECT @receiver=substring(@receiver,CHARINDEX(@Separator,@receiver)+1,len(@receiver))
END
END
If @@Error = 0
Commit Transaction
Else
Begin
Rollback Transaction my_Save1
Raiserror('邮件发送错误,请与系统管理员联系',16,1)
End
/*------------------代码结束---------------------*/
posted on 2004年5月27日 17:05