【问题标题】:How to stop query automatically after a few seconds in sql server?如何在sql server中几秒钟后自动停止查询?
【发布时间】:2021-05-02 09:33:19
【问题描述】:

我有这个程序。该过程在调用另一个过程。 如果需要超过几秒钟,我需要停止内部程序,但我不能使用停止按钮,因为它在另一个程序中

CREATE procedure [dbo].[proc_1]
as
begin

declare @id output
exec proc_2 @id

if no return for 5 seconds
stop proc_2 automatically

exec proc_3 @id


end

可以说 proc_2 正在尝试更新锁定的编辑表,因此延迟。 我想在分配给主程序的所有时间之前停止它并执行 proc_3 但是我应该写什么:如果没有返回 5 秒停止程序?

【问题讨论】:

  • 您为什么使用不受支持的 SQL Server 版本?
  • 你不能这样做; T-SQL 是一种严格的顺序语言,一旦运行某些东西,您就无法从同一个会话中停止它。要解决此问题,您需要执行脚本创建作业等操作。出于锁定目的,请查看SET LOCK_TIMEOUT(以及处理错误情况的TRY ... CATCH)。
  • 您想要的是一个内置于简单程序中的处理监视引擎。使用 SQL Server 中的普通命令,这种功能是不可能的。有可用的系统进程表可以使用监视引擎查询,但答案在技术上非常详细且冗长,可能涉及 CLR 或外部应用程序。

标签: sql sql-server-2008


【解决方案1】:

如果 proc_2 卡住,我将 lock_timeout 设置为返回 尝试并抓住。 proc_3 的 exec 在 catch 中

CREATE procedure [dbo].[proc_1]
as
begin

declare @id output

begin try
begin transaction
set lock_timeout 1000
exec proc_2 @id
commit transaction
end try

begin catch
exec proc_3 id
end catch


end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-24
    • 1970-01-01
    • 2012-09-15
    • 2018-10-22
    • 1970-01-01
    相关资源
    最近更新 更多