我有一个触发器,我想尝试根据另一个表的值更新一个字段。我已手动验证数据是否存在于另一个表中,因此我知道联接将起作用。但是,数据被插入到表中,但没有进行更新。这让我觉得我用触发器做了一些事情
Create Trigger [dbo].[trig_OnInsert] ON [dbo].[SHIPMENT]
For Insert
AS
BEGIN
UPDATE si
SET si.au = au.au + ' - ' + si.au
FROM SHIPMENT si
JOIN alphauniversal au
ON si.cm_controllerID = au.controllerid
WHERE si.cm_controllerID IN (Select si.cm_controllerID FROM Inserted)
End
另外,如果触发器出现错误,或者没有成功执行,记录还会插入到表中吗?
我担心
where
带有 的条款in
会引起问题。试着joining
去inserted
桌子。这里有两个示例 - 一个带有in
子句,一个带有 ajoin
toinserted
table。使用我的样本数据得出的结果有所不同。触发器代码作为在基表中实际插入行的事务的一部分运行。如果触发器遇到致命错误,则事务应回滚在该事务期间完成的所有内容。这是一个全有或全无的过程。
即使使用 try/catch 逻辑,您也无法在触发器中吞下异常。触发器内的任何异常都将中止事务。