这是我们的场景。。。
我们有一个事务来更新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:StmtStarting
和SP:StmtCompleted
。通过这种方式,您将能够检查触发器的执行情况。