标题: 有關SQLSERVER中觸發器的控討 [打印本页] 作者: HG 时间: 2002-6-12 19:35 标题: 有關SQLSERVER中觸發器的控討 高手指點一下我:
現有一個觸發器功能如下:
在表中插入一新記錄時,觸發操作
--------------------------------------------
alter trigger utr_trade_request_line_ins on trade_request_line after insert as
if @@rowcount = 0
return
declare @surplus as decimal(8,2),@col as int
select @col = (select wh_ins_line_no from inserted)
set @surplus = (select trade_wh_ins_line.wh_ins_line_pt - trade_request_line.request_line_pt from trade_wh_ins_line inner join trade_request_line on trade_wh_ins_line.wh_ins_line_no = trade_request_line.wh_ins_line_no and trade_request_line.request_line_no = @@identity)
--取得紗請求項后紗倉項尚存的值
if @surplus > 0
update trade_wh_ins_line set wh_ins_line_pt = @surplus where trade_wh_ins_line.wh_ins_line_no = @col
--精確定位到和插入虛擬表相對應的紗倉項,然后更新磅數為變量@surplus
else
begin
print 'Error!'
rollback transaction
end
--------------------------------------------------
此觸發器,調試通過,
但出現如下情況,
當變量@surplus<0時,我想停此任何運作命令,rollback tran
但在實際操作中,隨然返回觸發,
但一個Identity列,卻不能在邊續下去。
比如:
id列 ??值
1 xx
2 xx---->如果在這里觸發變值為負,則取消所用操作。
但下一記錄,id列,則為3,而2卻不可在用。
------------------------------
如何修改是好哪?
望指點。多謝。
mail:hghuanguan@cmmail.com作者: HG 时间: 2002-6-12 19:36
各位版主:
老革命又遇新問題,
現在如果在一個單表上發生觸發,在觸發的同事,去更新更一個表的值
alter trigger utr_trade_request_line_ins on trade_request_line after insert as
declare @surplus as decimal(8,2),@col as int
select @col =(select wh_ins_line_no from inserted)
select @surplus = trade_wh_ins_line.wh_ins_line_pt - inserted.request_line_pt from trade_wh_ins_line inner join inserted on trade_wh_ins_line.wh_ins_line_no = inserted.wh_ins_line_no
--分別給變量賦值,@col為預操作的入倉項,@surplus為預操作的結余值
if @surplus < 0 goto error
if @@error <>0
print 'Error: unknown error !'
begin transaction
update trade_wh_ins_line set wh_ins_line_pt = @surplus where wh_ins_line_no = @col
if @@error <> 0 goto problem
commit transaction