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空間的資料,所以暫時寫一點,日后我看到的話,回來再補回。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

