【问题标题】:Execute SQL Task continue execution after completion of Stored ProcedureExecute SQL Task 存储过程完成后继续执行
【发布时间】:2017-02-23 21:19:54
【问题描述】:

我有存储过程,我尝试使用执行 SQL 任务在 SSIS 中执行。此存储过程涉及游标,最后一步是取消分配游标。我观察到,即使在存储过程的执行完成之后,Execute SQL 任务也没有完成并且在进入下一步之前暂停了很长时间。为了测试这一点,我在存储过程中添加了 insert stmt 作为最后一行,其中 GETDATE() 作为一个列值。它显示 STP 执行在执行 SQL 任务完成前将近 2 小时完成。知道执行 SQL 任务是否正在运行一些额外的步骤以及所需的存储过程

【问题讨论】:

  • 您为什么认为 SSIS 或执行 SQL 任务有问题?使用游标是一种非常强烈的气味——需要游标的东西非常、非常、非常少。唯一有效的方案是批处理,由 SSIS 数据流解决。您的存储过程很可能没有在您认为结束时结束,因为游标完成所需的时间比等效的 SQL 语句要长得多。最坏的情况是,使用游标最终会锁定整个表数小时,从而导致与其他语句的活锁
  • 您能否发布您的代码或告诉我们您要做什么。它会让我们更好地了解正在发生的事情,并可能找到更好的解决方案。
  • 还要查看运行分析器,而不仅仅是在 SP 末尾使用插入语句>
  • @panagiotis: :) 我在这里没有考虑任何错误的任务,只是试图确定在最后一行代码之后会发生什么。我使用 Cursor 的场景如下:我说过 10 条记录,每条记录都需要通过不同的规则集来检查正确性。这使我一次运行一条记录,因此是光标。我已经在表上使用了行级锁定提示,所以我认为它不会锁定整个表。很高兴知道您是否有更好的方法来解决这个问题。感谢您的帮助
  • 如果没有 查询 本身就无法回答。无论如何,您甚至不需要光标。您可以为每个规则运行 1 个查询,因为您知道优化器会绕过。您可以将规则转换为函数,然后加入数据。或者您可以创建一个包含所有规则条目的真值表并将它们与数据连接

标签: sql-server stored-procedures ssis cursors


【解决方案1】:

已解决 :) 这基本上是因为我在 SQL 存储过程中使用了很少的 Print 语句,并且当我从 SSIS 执行这些存储过程时,它可能会创建一些在执行后被清除的缓冲区。我在存储过程中注释了 Print stmts,SSIS 中的执行时间与 SSMS 中的执行时间相同。

感谢您花时间帮助我。

问候

【讨论】:

    猜你喜欢
    • 2018-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-03
    • 1970-01-01
    • 1970-01-01
    • 2019-04-20
    相关资源
    最近更新 更多