我可以在交易期间在单独的交易中运行一些SQL

时间:2019-02-11 14:15:52

标签: sql-server error-handling transactional error-logging

我正在尝试为存储过程以及我们的标准错误处理创建一些标准日志记录。我想在sproc的开头调用存储过程以登录到它已启动的表,并在结尾调用一个存储过程以记录它已成功完成的日志。我还想从错误处理程序中调用存储过程来记录故障和错误消息/编号。

存储过程可能具有自己的事务,或者其调用堆栈可能已启动事务,或者可能没有打开的事务。无论主事务中发生了什么,我都根本不想回滚对日志记录过程的任何调用。即日志存储过程的处理必须与主处理完全分开。

是否可以执行某些SQL,就像它在事务期间处于单独的会话中一样?实现此目的最简单的方法是什么?

顺便说一句,我不能使用xp_cmdshell,否则我将对sqlcmd进行调用。

谢谢

标记

1 个答案:

答案 0 :(得分:1)

您所描述的是嵌套事务。但是,嵌套事务不是真实的。 https://www.sqlskills.com/blogs/paul/a-sql-server-dba-myth-a-day-2630-nested-transactions-are-real/您将不得不在另一个上下文中进行日志记录。由于您处于存储过程中,因此必须在日志记录代码中使用动态sql才能起作用。