[英]How to make sure the SQL trigger complete after the Transaction.commit?
这是我们的情况...
我们有一个事务来更新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'
关于如何检查触发器是否完成,一种方法是检查触发器中涉及的表,这意味着相关表/记录是否已相应更新。
我认为最好的另一种方法是使用SQL Server Profiler检查触发器的执行情况。 执行SQL Server Profiler,在事件选择部分中,启用选项“显示所有事件”,并确保已选中存储过程SP:StmtStarting
和SP:StmtCompleted
。 您将可以通过这种方式检查触发器的执行情况。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.