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

时间:2013-11-22 04:28:39

标签: c# .net sql sql-server

以下是我们的情景......

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

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

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

但是我们发现,有时GetData()无法返回正确的结果。我们怀疑那时触发器还没有完成......

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

非常感谢你提前...

1 个答案:

答案 0 :(得分:1)

您可以通过以下方式检查触发器的状态(如果已启用或禁用):

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'

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

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