GO在SQL Server Management Studio和Transact SQL中的用途是什么?


363

当我使用右键单击“脚本为”菜单创建查询时,SQL Server Management Studio始终会插入GO命令。为什么?GO实际做什么?



29
@ChrisF-这不是重复的,尽管接受的答案也回答了这个问题。这个问题是关于在事务中使用“ GO”的-事实证明这根本不是SQL命令。这个问题更为笼统,它试图为有关SSMS中GO命令的问题提供确定的答案。
tvanfosson

3
还请看一下此链接:批处理语句有什么用处?
Zain Rizvi 2013年

Microsoft文档:SQL Server实用程序语句-GOGO之前的批次将执行指定的次数。
分钟

Answers:


304

这是一个批处理终止符,但是您可以将其更改为所需的任何值 alt text


80
gbn将其
设为

14
谢谢!但是,GO语句的意义何在?这听起来可能很愚蠢,但是“代码批处理”是什么意思?msdn说GO后,变量的寿命就到期了。听起来与交易承诺无关吗?在任何情况下我都应该在脚本中保留GO语句?
kate1138

4
这意味着它之前的所有T-SQL都将“一次”执行。据我了解,它可以与分号(OLEDB / Oracle)互换。例如,如果您有一个大型的部署后脚本,则行之间的GO语句可能有助于脚本中使用的内存。
安东尼·梅森

4
这个答案并没有真正解释“它实际上做了什么”或原因
安德鲁(Andrew)

看完@tvanfosson的答案后:它真的可以与分号互换吗?
WoIIe

298

从Management Studio 2005开始,似乎可以使用GO一个int参数,例如:

INSERT INTO mytable DEFAULT VALUES
GO 10

上面将在中插入10行mytable。一般来说,GO将执行相关的sql命令n


199

GO命令不是Transact-SQL语句,而是由多个MS实用程序(包括SQL Server Management Studio代码编辑器)识别的特殊命令。

GO命令用于将SQL命令分成批处理,然后一起发送到服务器。批处理中包含的命令(即自上一个GO命令或会话开始以来的命令集)必须在逻辑上保持一致。例如,您不能在一个批次中定义一个变量,然后在另一个批次中使用它,因为变量的范围仅限于定义它的批次。

有关更多信息,请参见http://msdn.microsoft.com/zh-cn/library/ms188037.aspx


37
在什么情况下批处理GO实际上有用?
nicodemus13 2013年


4
因此,如果批处理中的1条语句失败,那么所有语句都会失败吗?
MonsterMMORPG

36

GO不是SQL关键字。

这是客户端工具(例如SSMS)使用的批处理分隔符,用于将整个脚本分成多个批处理

多次回答... 示例1


4
在我的答辩中,我确实在提交问题之前仔细研究了建议的重复项目-尽管您的答案适用,但您的示例并未出现,也不一定是重复项目。
tvanfosson

26
在这里很难搜索“ GO” :-)
gbn

20

只是为了添加到现有答案中,在创建视图时,必须使用将这些命令分成批处理go,否则将收到错误消息'CREATE VIEW' must be the only statement in the batch。因此,例如,如果没有以下命令,您将无法执行以下sql脚本:go

create view MyView1 as
select Id,Name from table1
go
create view MyView2 as
select Id,Name from table1
go

select * from MyView1
select * from MyView2

还创建过程
Luciano Santos

2
这是真正解决OP的第一部分问题的唯一答案:“ ...总是插入GO命令...。为什么?”。似乎大多数时候,出于恐惧。唯一需要的时间是命令必须位于其自己的批处理中。
bielawski,

7

Go意味着,无论在其之前和之后的任何早期编写的SQL语句如何,都将转到SQL Server进行处理。

Select * from employees;
GO    -- GO 1

update employees set empID=21 where empCode=123;
GO    -- GO 2

在上面的示例中,GO 1之前的语句将成批进入sql服务器,然后GO 2之前的任何其他语句将成批进入SQL Server。因此,正如我们所见,它已分批处理。


5
Use herDatabase
GO ; 

代码说要执行GO标记上方的指令。我的默认数据库是myDatabase,所以不要使用myDatabase GO并使当前查询使用herDatabase


-8

这是GO的魔力。

SELECT 'Go'
Go 10

语法:进入INT(BatchNumber)

批号:发生次数

看起来很简单,如果您编写更深的代码,可能会导致您进入意粉


这试图解释编程中使用的GOTO语句(我认为),例如批处理脚本..与SQL Server中的GO语句无关。GO通常不与INT一起使用,尽管如果您希望处理N次,则可以这样做。所以不,那不是GO的“魔力”。如其他答案所述,它用于将脚本分成一系列分组的执行。
Heriberto Lugo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.