一个跨月请假单据判断触发器

 1 use hrmis
 2 set ANSI_NULLS ON
 3 set QUOTED_IDENTIFIER ON
 4 GO
 5 Alter Trigger [dbo].[Tg_k20_month] on [dbo].[k20]
 6 FOR insert,update
 7 AS
 8 if(update(k2006)) or (update(k2007))
 9 BEGIN
10  declare @msg nvarchar(80), @begTIme datetime, @endTime datetime;
11  declare @Year int, @Month int;
12  --获取请假的年份及月份
13  select @Year = Year(k2006),
14      @Month = Case
15       When Day(k2006) > 25 Then Month(k2006)+1
16       else Month(k2006)
17      End
18  From Inserted;
19  --计算请假单据的开始时间所在的月份
20  Select @endTime = Case
21       When @Month < 10 Then Convert(varchar(4),@Year)+'0'+Convert(varchar(1),@Month)+'25'
22       else Convert(datetime, Convert(varchar(4),@Year)+Convert(varchar(1),@Month)+'25')
23        End
24 --     ,@begTime = Case
25 --      When @Month < 11 Then Convert(varchar(4),@Year)+'0'+Convert(varchar(1),@Month-1)+'26'
26 --      else Convert(varchar(4),@Year)+Convert(varchar(1),@Month-1)+'26'
27 --       End
28  if exists(Select A0188 From Inserted Where k2007 > @endTime)
29   Begin
30    Select @msg=Convert(varchar(5),k2006,110)+''+Convert(varchar(5),k2007,110)+
31                       '此段时间内有跨月现象,请按月份重新录入!'  from Inserted 
32    raiserror(@msg,16,1)
33    rollback transaction 
34    return
35   End
36 End
37 return


有一个问题,是后来发现的,上面SQL语句中有一段:

1 if exists(Select A0188 From Inserted Where k2007 > @endTime)
2   Begin
3    Select @msg=Convert(varchar(5),k2006,110)+''+Convert(varchar(5),k2007,110)+
4                       '此段时间内有跨月现象,请按月份重新录入!'  from Inserted 
5    raiserror(@msg,16,1)
6    rollback transaction 
7    return
8   End

其中raiserror(@msg,16,1)
是抛出一个错误级别为16的异常信息,这个信息能否被C#里的catch语句捕足?具体怎么捕捉?由于今天是在转我QQ空间的资料,所以暂时写一点,日后我看到的话,回来再补回。

posted @ 2012-06-28 17:07  Seasons1987  阅读(369)  评论(0编辑  收藏  举报