SQL Server同时执行多个命令

时间:2011-06-21 14:02:26

标签: sql sql-server

我有一个存储过程,我需要执行100次(每个参数一个)。我想知道我是否可以使用批处理或类似的东西同时执行所有这些操作,以便加快处理而不是执行一个然后再执行下一个处理。

谢谢!

2 个答案:

答案 0 :(得分:3)

您是否可以重写您的程序以接受TABLE参数,填写100个值,并使用流程表而不是100个标量?

答案 1 :(得分:1)

要直接回答您的问题,您可以打开100个单独的连接并同时执行100个单独的查询。

但正如已经提到的,我不认为这是你的解决方案。


由于你有一个包含100个值的表,看起来你有几个选项......


  • 将StoredProcedure更改为View,然后加入视图。
  • 将StoredProcedure更改为表值函数,并使用CROSS APPLY (内联函数将比多语句函数执行得更好。)

这两者受到以下事实的限制:视图和函数都不会产生任何副作用......不能写表格等等。


如果您无法重构代码以使用视图或函数,则仍需要一个存储过程来封装代码。

在这种情况下,你可以:
- 将值表作为表值参数传递 - 或者直接从表中读取存储过程。

根据您的需要,您甚至可能希望专门为此SP创建一个表来进行读取。这引入了一些额外的问题,但...... - 并发:如何将我的数据与别人分开?有一个字段来保存唯一标识符,例如会话的@@ SPID - 清理:您不希望进程整天插入数据,但从不删除它。


我强烈建议你避免使用循环/游标。如果您可以找到基于集合的方法,请使用它:)


修改

您刚刚发表的评论提到您需要处理数百万条记录。

这使得使用基于集合的方法更加可取。但是,您可能会发现这会创建非常大的事务(如果您正在执行大量的INSERT,UPDATE等)。在这种情况下,仍然可以找到基于集合的方法,然后找到一种以较小的方式执行此操作的方法(例如,如果数据与时间相关,则按天分割,或者一次只有1000条记录,无论适合。)