2011-03-08 48 views
0

我正在尝试创建一个触发器,它将用收据信息更新历史记录表。加入触发器?

我的源表有一个SourceID和一个ReceiptID。

所以当我更新收据表时,我想将该记录复制到历史表,但我首先需要获取正在更新的源的SourceID。

这是我现在有:

ALTER TRIGGER [dbo].[trg_ReceiptHistory] 
ON [dbo].[tblReceipt] 
for UPDATE 
AS 
begin try 
INSERT INTO tblHistorySource(RecShipName, RecShipAddress, sourceID) 
select t1.shippingName, t1.shippingAddress, t2.sourceID 
from [DELETED] t1, tblSource t2 
where t2.receiptID = t1.receiptID 
end try 
begin catch 
SELECT 
ERROR_NUMBER() AS ErrorNumber, 
ERROR_SEVERITY() AS ErrorSeverity, 
ERROR_STATE() AS ErrorState, 
ERROR_PROCEDURE() AS ErrorProcedure, 
ERROR_LINE() AS ErrorLine, 
ERROR_MESSAGE() AS ErrorMessage; 
RAISERROR('Error in Source Hisotry Trigger' ,16,1) 
ROLLBACK TRAN 
END CATCH 

当我尝试做一个简单的更新到tblReceipt,我得到以下错误:

Msg 50000, Level 16, State 1, Procedure trg_ReceiptHistory, Line 24 
Error in Source Hisotry Trigger 
Msg 3609, Level 16, State 1, Line 1 
The transaction ended in the trigger. The batch has been aborted. 

我是不是做错了?请帮助:(

+0

什么是有关发送你进入'catch'块错误的详细信息在第一个地方? – 2011-03-08 20:56:13

回答

2

首先要做的是去掉CATCH,看到错误,我们可以从那里。

ALTER TRIGGER [dbo].[trg_ReceiptHistory] 
ON [dbo].[tblReceipt] 
for UPDATE 
AS 
--begin try 
INSERT INTO tblHistorySource(RecShipName, RecShipAddress, sourceID) 
select t1.shippingName, t1.shippingAddress, t2.sourceID 
from [DELETED] t1, tblSource t2 
where t2.receiptID = t1.receiptID 
/*end try 
begin catch 
SELECT 
ERROR_NUMBER() AS ErrorNumber, 
ERROR_SEVERITY() AS ErrorSeverity, 
ERROR_STATE() AS ErrorState, 
ERROR_PROCEDURE() AS ErrorProcedure, 
ERROR_LINE() AS ErrorLine, 
ERROR_MESSAGE() AS ErrorMessage; 
RAISERROR('Error in Source Hisotry Trigger' ,16,1) 
ROLLBACK TRAN 
END CATCH*/ 
+0

谢谢!我看到错误,一切正在工作:) – 2011-03-08 21:05:49

+0

什么是错误? – alldayremix 2013-05-18 19:26:20