【问题标题】:T-SQL "after insert trigger" invoke by store procedureT-SQL“插入触发器后”由存储过程调用
【发布时间】:2013-01-21 12:57:31
【问题描述】:

我有一个存储过程,可以在表中插入记录,同时删除所有早于 20 分钟的记录。

我已经尝试对其进行优化,并且发现删除操作的成本很高。所以,我决定创建后插入触发器来执行删除操作。

现在看来,它的工作速度更快,但执行计划显示触发器中的“删除”语句 - 唯一的区别是现在删除语句具有“查询成本(相对于批处理):0%. "

我的问题是,当程序插入记录时,是立即返回结果还是等待插入后触发器完成?

【问题讨论】:

    标签: tsql stored-procedures triggers sql-server-2012


    【解决方案1】:

    触发器与调用过程是同一事务的一部分,因此整个事务只有在触发器触发后才会完成,来自 MSDN:

    触发器和触发它的语句被视为单个事务,可以从触发器内回滚。如果检测到严重错误(例如磁盘空间不足),整个事务会自动回滚。

    MSDN - Understanding DML Triggers

    【讨论】:

    • 所以,最后没有区别 - 如果我删除过程中的记录,如果我使用过程调用的触发器删除它们。
    • 确实,虽然我不确定如果您在存储过程中明确开始并提交事务是否会有所作为。也许值得测试。
    猜你喜欢
    • 2011-06-20
    • 1970-01-01
    • 1970-01-01
    • 2018-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-05
    • 1970-01-01
    相关资源
    最近更新 更多