【问题标题】:Execute SQL Server stored procedures sequentially with notification通知顺序执行 SQL Server 存储过程
【发布时间】:2018-09-20 18:49:23
【问题描述】:

对于 Microsoft SQL 服务器,我想按顺序执行存储过程,并在过程的后续部分仍在执行时通知和使用结果。例如,下面的代码只有在所有 3 个过程都完成后才会打印 3 个句子 'Update_TableX_done'。

'Update_TableX' 是存储过程,可以将一些更新的数据插入到表中。

我可以设置在每个 EXEC 语句完成后执行打印吗?

Table2更新时可以使用Table1的结果吗?

如果Update_Table2进程失败,我可以保留Update_Table1的结果吗?

或者,只有在Update_Table1完成后才手动启动Update_Table2?

    EXEC [dbo].[Update_Table1]
    PRINT 'Update_Table1_done'
    EXEC [dbo].[Update_Table2]
    PRINT 'Update_Table2_done'
    EXEC [dbo].[Update_Table3]
    PRINT 'Update_Table3_done'

【问题讨论】:

  • SQL 是运行批处理时的顺序语言;批处理中的每个语句依次运行,一个接一个。那里有 6 个语句,每个语句都将在前一个语句之后运行(自上而下);一个在另一个完成之前不会运行(这并不意味着成功)。是的,您可以使用UPDATE 的输出,但您所拥有的是EXEC 语句,而不是UPDATE 语句。但是,您没有在这里定义您想要实际执行的操作。退后一步,看看你的问题,看看你能不能用我们所掌握的模糊信息来回答它。你需要更清楚你在问什么。
  • 根据您的建议,添加了一句以阐明它们是存储过程:“Update_TableX”是将一些更新的数据插入到表中的存储过程。
  • 问题一:是的,问题 2 和 3:如果没有更多信息,您无法判断您要做什么
  • 问题一:是的(可以分享一下你的SQL代码吗?或者系统设置?目前我的系统只有在整个查询完成后才会弹出3条打印语句。)
  • 问题2和3:根据另一个用户定期更新的另一个表中的信息,在一个表中插入新行。

标签: sql sql-server


【解决方案1】:

PRINT 命令在缓冲区填满时刷新消息。要触发即时消息刷新到消息流,请使用带有 WITH NOWAIT 选项的 RAISEERROR。

raiserror('Test 1', 10, 1) with nowait;
waitfor delay '00:00:05';
raiserror('Test 2', 10, 1) with nowait;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-29
    • 2011-11-07
    • 1970-01-01
    • 1970-01-01
    • 2021-05-22
    • 2016-10-15
    • 2016-10-21
    相关资源
    最近更新 更多