Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在事务内部将状态信息从存储过程传递给调用方_Sql Server_Tsql_Ado.net - Fatal编程技术网

Sql server 在事务内部将状态信息从存储过程传递给调用方

Sql server 在事务内部将状态信息从存储过程传递给调用方,sql-server,tsql,ado.net,Sql Server,Tsql,Ado.net,我有一个长期运行的SP(它最多可以运行几分钟),它基本上对事务中的各种表执行许多清理操作。我正在尝试确定以某种方式将人类可读的状态信息传递回调用者的最佳方式,即SP当前正在执行的流程步骤 因为整个SP都在一个事务中运行,所以我不能把这个信息写回状态表,然后从另一个线程读取它,除非我使用NoLoCK来读取它,我认为这是自 NOLOCK会导致其他数据不一致问题;及 这使得任何想要读取状态表的人都有责任使用NOLOCK,因为表或行可能会被锁定一段时间 是否有任何方法可以在事务中发出单个命令(或执行

我有一个长期运行的SP(它最多可以运行几分钟),它基本上对事务中的各种表执行许多清理操作。我正在尝试确定以某种方式将人类可读的状态信息传递回调用者的最佳方式,即SP当前正在执行的流程步骤

因为整个SP都在一个事务中运行,所以我不能把这个信息写回状态表,然后从另一个线程读取它,除非我使用NoLoCK来读取它,我认为这是自

  • NOLOCK会导致其他数据不一致问题;及
  • 这使得任何想要读取状态表的人都有责任使用NOLOCK,因为表或行可能会被锁定一段时间
是否有任何方法可以在事务中发出单个命令(或执行第二个SP),并指定该特定命令不应成为事务的一部分?或者ADO.NET是否有其他方法可以深入了解这个长期运行的SP,以了解它当前正在做什么?

您可以尝试在过程中使用(使用10或更低的严重性)来返回信息性消息

例如:

RAISERROR(N'Step 5 completed.', 10, 1) WITH NOWAIT;
您可以尝试在过程中使用(严重性为10或更低)返回信息性消息

例如:

RAISERROR(N'Step 5 completed.', 10, 1) WITH NOWAIT;

您可以在T-SQL中打印消息,并通过“InfoMessage”事件将它们发送到ADO.NET中的SqlConnection。看


详细信息。

您可以在T-SQL中打印消息,并通过“InfoMessage”事件将它们发送到ADO.NET中的SqlConnection。看


详细信息。

+1
PRINT
基本上是
RAISERROR
,严重性为0,因此订阅此事件应适用于两种方法。+1
PRINT
基本上是
RAISERROR
严重性为0,因此订阅此事件应适用于两种方法。感谢Joe/Martin,看起来RAISERROR/NOWAIT加上InfoMessage事件正是我要找的。谢谢Joe/Martin,看起来RAISERROR/NOWAIT加上InfoMessage事件正是我要找的。