繁体   English   中英

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

[英]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:StmtStartingSP:StmtCompleted 您将可以通过这种方式检查触发器的执行情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM