如何确保在Transaction.commit之后完成SQL触发器



这是我们的场景。。。

我们有一个事务来更新SQL server数据库,我们在数据库中也有一些SQL触发器来做一些相应的工作(更新表、添加一些数据等)。

在事务提交之后,我们需要读取从触发器更新的数据。。。。代码如下所示。。。

using (var tm = UpdateTransaction.Begin(...))
                            {
                                UpdateDatabase();
                                tm.Commit();
                            }
                            string val = GetData();

然而,我们发现,有时GetData()无法返回正确的结果。我们怀疑当时触发尚未完成。。。

所以。。。如何处理这个问题,你能给我们一些建议吗。

提前非常感谢。。。

您可以通过以下方式检查触发器的状态:

SELECT
OBJECT_NAME(PARENT_OBJ) TABLE_NAME,
NAME AS TRIGGER_NAME,
CASE OBJECTPROPERTY(ID, 'EXECISTRIGGERDISABLED')
WHEN 0 THEN 'ENABLED'
ELSE 'DISABLED'
END AS STATUS
FROM SYSOBJECTS
WHERE XTYPE = 'TR'

关于如何检查触发器是否完成,一种方法是检查触发器中涉及的表,也就是说相关的表/记录是否相应更新。

我认为最好的另一种方法是使用SQLServerProfiler检查触发器的执行情况。执行SQL Server Profiler时,在事件选择部分中,启用"显示所有事件"选项,并确保已选中存储过程SP:StmtStartingSP:StmtCompleted。通过这种方式,您将能够检查触发器的执行情况。

最新更新