如果我执行以下脚本:
EXECUTE LongRunningSP1
GO
EXECUTE LongRunningSP2
GO
假设两个过程都需要几分钟,那么GO批处理是否会导致任何并发发生,或者LongRunningSP1是否会在LongRunningSP2启动之前完成?
答案 0 :(得分:3)
GO
只会批量分割您的代码,但它不会导致任何并发:所有批次按照它们在代码中出现的顺序执行一次。
答案 1 :(得分:2)
LongRunningSP1保证在LongRunningSP2之前完成,有或没有GO; GO是命令处理器的批处理分隔符。
使用命令行实用程序SQLCMD时,更容易看到它的作用。
SQLCMD
1> exec LongRunningSP1
-- nothing happens
2> exec LongRunningSP2
-- nothing happens
3> GO
-- both procs are run, first SP1, then SP2
答案 2 :(得分:0)
是!! Go实际上会将其分批处理。 所以它的LongRunningSP1首先完成,总是!
答案 3 :(得分:0)
GO不是Transact-SQL语句;它是sqlcmd和osql实用程序以及SQL Server Management Studio代码编辑器可识别的命令。它是一个批处理终止符,它不会更改查询的顺序。但是,您可以根据选项将其更改为您想要的任何内容。
以下是在SSMS中自定义批处理分隔符的一组非常简单的简单步骤: