我想要一个存储过程,将记录插入表 A 并更新表 B 中的记录。
将从触发器内调用存储过程。
我希望即使触发器的最外层事务回滚,表A中插入的记录也存在。
表A中的记录是线性链接的,我必须能够重建线性连接。
对表 A 的写访问只能通过触发器进行。
我该怎么办?
您正在寻找的是自治事务,而目前的 SQL Server 中不存在这些事务。请对以下项目进行投票/评论:
http://connect.microsoft.com/SQLServer/feedback/details/296870/add-support-for-autonomous-transactions http://connect.microsoft.com/SQLServer/feedback/details/296870/add-support-for-autonomous-transactions
http://connect.microsoft.com/SQLServer/feedback/details/324569/add-support-for-true-nested-transactions http://connect.microsoft.com/SQLServer/feedback/details/324569/add-support-for-true-nested-transactions
您可以考虑使用 xp_cmdshell 或 CLR 走出 SQL 引擎并返回(这些操作无法由 SQL Server 回滚)...但这些方法并非没有自己的问题。
另一个想法是使用代替触发器 http://technet.microsoft.com/en-us/library/ms175521.aspx- 您可以记录/更新其他表,然后决定不继续执行实际操作。
EDIT
按照@VoodooChild的建议,您可以使用@table
变量来临时保存您可以在回滚后引用的数据 - 该数据将在回滚后保留下来,这与插入到#temp table
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)