【问题标题】:WAITFOR for an action inside procedure等待过程内部的动作
【发布时间】:2016-11-09 10:36:04
【问题描述】:

我有两个程序。依次调用一个接一个。

第 1 步: App(Java) 将调用 Proc1

create procedure proc1
as
begin 
stmt 1
stmt 2
stmt 3
stmt 4 -- select query (result)
end

第 2 步:我们的应用程序 (Java) 将捕获结果并操作数据,并将在另一个名为 result_table的表中更新

第 3 步: App(Java) 调用 Proc2

create procedure Proc2
as
begin 
stmt 1
stmt 2
stmt 3
stmt 5 -- this step uses result_table
stmt 6
end

正如您在两个过程中看到的,前三个语句是相同的。所以我打算将这两个程序结合在一起,以避免代码重复。像

create procedure proc1
as
begin 
stmt 1
stmt 2
stmt 3
stmt 4 -- select query (result)
--- App(Java) will capture the result and process it 
--- wait until the app completes the changes then proceed to stmt 5
stmt 5 
stmt 6
end

这里棘手的部分是等待应用程序完成过程并继续第 5 步。我们可以在过程中等待一些信号或类似的东西吗?有任何想法吗 ?

搜索了论坛没有得到任何正确的答案。

【问题讨论】:

  • 我猜是使用 CLR 存储过程。利用 .NET 框架来等待该信号。当然取决于那个信号是什么......
  • 不错的老式轮询是一种选择(在循环中调用WAITFOR DELAY)。您还可以将消息放入服务代理队列中,然后将 RECEIVE 放入其中(顺便说一句,这是 WAITFOR 中唯一允许的其他内容)。
  • 我们的应用代码使用Java。不幸的是,这里没有可用的 .NET 或 C# 开发人员:/。我们可以在数据库中处理这个吗?
  • 我认为您的查询不需要使用 waitfor 选项
  • 如果您唯一的问题是复制 代码(而不是执行代码),您可以将复制的代码发送到新的存储过程和 EXEC从其他地方。您可能需要解决共享数据的问题,但是有ways for that

标签: sql sql-server stored-procedures sql-server-2012


【解决方案1】:

尝试在stmt 4和5之间使用GO关键字,并使用IF条件检查result_table。

【讨论】:

  • 你不能在存储过程中使用 GO。从那个链接: GO 不是 Transact-SQL 语句;它是 sqlcmd 和 osql 实用程序以及 SQL Server Management Studio 代码编辑器识别的命令。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-30
  • 2021-11-26
  • 1970-01-01
  • 2018-02-25
相关资源
最近更新 更多