我是否必须编写“GO”字才能执行SQL服务器语句?

时间:2011-03-27 16:49:07

标签: sql sql-server tsql

我对TSQL和SQL Server几乎没有经验 - 所以在我想要执行语句的MySQL中我只写:

Select * from users

...然后按ENTER键。

但是现在我看到许多SQL Server教程在每个语句后立即有GO个字。我必须写这个吗?例如:

Select * from users; GO

或者我可以简单地写一下:

Select * from users; <enter key pressed...>

5 个答案:

答案 0 :(得分:7)

在SQL Server中,go分隔查询批次。在大多数情况下它是可选的。

在早期版本的SQL Server中,您必须在更改表后执行go,例如:

alter table MyTable add MyColumn int
go
select MyColumn from MyTable

如果没有,SQL Server将解析查询批处理,并抱怨MyColumn不存在。见MSDN

  

SQL Server实用程序将GO解释为   他们应该发送信号   当前批处理的Transact-SQL   对SQL实例的语句   服务器。目前批次   陈述由所有人组成   自上次GO以来输入的语句,   或自特设开始以来   会话或脚本,如果这是第一个   GO。

答案 1 :(得分:2)

正如Andomar所写,

GO将批次分开。

某些SQL语句(例如CREATE SCHEMA)必须是批处理中的第一个或唯一的语句。例如,MSDN个州

  

CREATE PROCEDURE语句不能   与其他Transact-SQL结合使用   一批中的陈述。

局部变量也仅限于批次,因此在GO之后无法访问。

答案 2 :(得分:1)

Go是可选的,不需要在sql语句中编写它。

答案 3 :(得分:0)

你不必。 GO将做的是执行每个语句(至少在Sql Server中)

答案 4 :(得分:0)

正如其他回答者在我之前所说,你并不需要Go

只有一种情况需要使用它,当你想要创建一个表或视图然后从中进行选择时。

例如:

create view MyView as select * from MyTable   
go   
select * from MyView

如果没有Go,Sql Server将不会执行此操作,因为select语句无效,因为此时该视图不存在。