SQL Server(TSQL) - 是否可以并行执行EXEC语句?

Out*_*per 14 sql t-sql sql-server

SQL Server 2008 R2

这是一个简化的例子:

EXECUTE sp_executesql N'PRINT ''1st '' + convert(varchar, getdate(), 126) WAITFOR DELAY ''000:00:10'''
EXECUTE sp_executesql N'PRINT ''2nd '' + convert(varchar, getdate(), 126)'
Run Code Online (Sandbox Code Playgroud)

第一个语句将打印日期并在继续之前延迟10秒.第二个陈述应立即打印.

T-SQL的工作方式,第二个语句在第一个语句完成之前不会被评估.如果我将其复制并粘贴到新的查询窗口,它将立即执行.

问题是我还有其他更复杂的事情,需要传递给两个程序的变量.

我想要做的是:

  • 得到一个记录
  • 将其锁定一段时间
  • 当它被锁定时,对该记录和表本身执行一些其他语句

也许有一种方法可以动态创建几个工作?

无论如何,我正在寻找一种简单的方法来做到这一点,而无需手动PRINT语句和复制/粘贴到另一个会话.

有没有办法在没有等待/并行的情况下执行EXEC?

Rem*_*anu 17

是的,有一种方法,请参阅异步程序执行.

但是,这可能不是你需要的.T-SQL是一种数据访问语言,当您考虑事务时,锁定和提交/回滚语义几乎不可能有并行作业.并行T-SQL例如与请求队列一起工作,其中每个请求是独立的,并且作业之间没有相关性.

你所描述的内容完全听起来不像是能够,也不应该实际上被贬低的东西.

  • 您可以从第一个脚本运行另一个脚本,或者通过sp_executesql在服务器端执行,也可以使用sqlcmd扩展(启用时,SSMS也支持)在客户端执行。您可以运行的一个命令是“ start”,它将启动一个进程而不等待完成。因此,您可以运行`sp_executesql'启动sqlcmd -E -S。-d dbname -i“ myscript.sql”';`并获得“第二个线程”。就像从另一个SSMS查询窗口中运行一样,但是是自动的。您将失去的一件事是您启动的脚本中的任何错误/结果。 (2认同)

DVK*_*DVK 2

如果您想要锁定一条记录以便可以对其执行语句,您可能希望将这些语句作为事务执行。

要并行执行 SQL,您需要并行化 SQL 调用,方法是在 Java、C++、perl 或任何其他编程语言中的单独线程/进程中执行 SQL(见鬼,在后台的 shell 脚本中启动“isql”将起作用)