8

我想做类似的事情:

exec sproc1 and sproc2 at the same time
when they are both finished exec sproc3

我可以在 dts 中做到这一点。有没有办法在事务 sql 中做到这一点?或者有没有办法用批处理脚本(例如vbs或powershell)来做到这一点?

4

4 回答 4

5

您可以创建一个 CLR 存储过程,它(使用 C#)将在自己的线程上调用前两个,然后阻塞直到两个都完成......然后运行第三个。

您可以在您的情况下使用 CLR 存储过程吗?如果是这样,我将编辑此答案以获取更多详细信息。

于 2008-11-10T14:20:34.027 回答
4

sp_开始_工作

我现在正在做类似的事情,我发现避免使用 SSIS 或某些外部 shell 的唯一方法是将我的加载例程手动拆分为“线程”,然后触发一个主 sqlagent 作业,这反过来执行与我有线程一样多的 sp_start_job。从那时起,它们都自主运行。

这不完全是我们正在寻找的,但结果是一样的。如果您测试子作业的作业状态,您也可以实现 sproc 3 的条件启动。

如果我们不能一次全部使用 8 个核心,那又有什么意义呢?

于 2009-03-10T01:28:51.613 回答
1

您绝对需要两个 SP 并行执行吗?

通过单个 SP 中的简单 CRUD 语句,我发现 SQL S. 在确定哪些可以并行运行并这样做方面做得非常好。我从来没有见过 SQL S。如果两个 SP 都是从 T-SQL 语句中按顺序调用的,那么并行运行 2 个 SP,甚至不知道它是否可能。

那么,DTS 真的并行执行它们吗?可能是它只是按顺序执行它们,然后在最后一个成功完成后调用第三个 SP。

如果它真的并行运行它们,可能你应该坚持使用 DTS,但是我想知道如果我有一个 DTS 包调用,比如说,10 个重型 SP 并行......我可能不得不做一些测试来了解自己:D

于 2008-11-10T17:20:05.067 回答
0

您可以使用 SSIS。这样做的好处是包可以存储在 SQL Server 中,并且可以轻松地在那里进行调度。

从 PowerShell 或几乎任何外部脚本语言,您可以使用 SQL 命令行 osql 或 sqlcmd。这种技术也可以通过使用 xp_cmdshell 来在 SQL Server 上调度它。

于 2009-01-23T18:24:24.503 回答