Jon*_*nno 4 t-sql sql-server stored-procedures transactions
我想有一个存储过程,将记录插入tableA并更新tableB中的记录.
将从触发器内调用存储过程.
我希望tableA中插入的记录存在,即使回滚触发器的最外层事务也是如此.
tableA中的记录是线性链接的,我必须能够重建线性连接.
对tableA的写访问权只能通过触发器进行.
我该怎么做?
您正在寻找的是自治事务,而今天SQL Server中不存在这些事务.请对以下项目进行投票/评论:
你可以考虑做的是使用xp_cmdshell或CLR来回到SQL引擎之外(SQL Server无法回滚这些操作)......但这些方法并非没有自己的问题.
另一个想法是使用INSTEAD OF触发器 - 您可以记录/更新其他表,然后决定不继续执行实际操作.
编辑
根据@ VoodooChild的建议,你可以使用一个@table变量临时保存你可以在回滚后引用的数据 - 这个数据将在回滚过程中存活,不像插入到#temp table.