请问关于SQL SERVER中GO的用法

百变猪娃娃 2014-07-18 09:59:58
use TestDB -- 使用TestDB数据库
select * from table



use TestDB
go
select * from table

执行起来没区别啊,都是从上往下执行的,不需要GO啊,为何很多人写GO ?

实在不理解
...全文
278 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
百变猪娃娃 2014-07-18
  • 打赏
  • 举报
回复
引用 8 楼 chz415767975 的回复:
[quote=引用 5 楼 whwfwfy 的回复:] 好吧,我把问题 换个问法,大家看看如何。 SQL语句1 SQL语句2 SQL语句3 执行顺序应该就是 先执行 SQL语句1,然后执行 SQL语句2,最后执行 SQL语句3。 请问,是不是这样的? 如果是这样的,那么何必用GO呢?
--举个简单的例子,这种情况,在查询分析器里面,中间如果不加go就会报语法错误
select * from tb
go
with cte
as
(
select * from tb

)
select * from cte
[/quote] 谢谢,结贴。
百变猪娃娃 2014-07-18
  • 打赏
  • 举报
回复
引用 7 楼 Tiger_Zhao 的回复:
CREATE PROCEDURE sp_X
AS
SELECT ...
GO

DELETE ...
INSET ...
UPDATE ...

EXEC sp_X
如果不加这个 GO,sp_X 的内容包含哪些语句?
谢谢,例子清晰明了,立马明白了。
發糞塗牆 2014-07-18
  • 打赏
  • 举报
回复
CREATE PROCEDURE sp_X AS SELECT ... DELETE ... INSET ... UPDATE ... EXEC sp_X 借用上面的例子,如果是这样直接执行,那么sp里面还嵌套本身,就会报32层嵌套错误,如果在最后EXEC前面加一个go,就不会
霜寒月冷 2014-07-18
  • 打赏
  • 举报
回复
引用 5 楼 whwfwfy 的回复:
好吧,我把问题 换个问法,大家看看如何。 SQL语句1 SQL语句2 SQL语句3 执行顺序应该就是 先执行 SQL语句1,然后执行 SQL语句2,最后执行 SQL语句3。 请问,是不是这样的? 如果是这样的,那么何必用GO呢?
--举个简单的例子,这种情况,在查询分析器里面,中间如果不加go就会报语法错误
select * from tb
go
with cte
as
(
select * from tb

)
select * from cte
Tiger_Zhao 2014-07-18
  • 打赏
  • 举报
回复
CREATE PROCEDURE sp_X
AS
SELECT ...
GO

DELETE ...
INSET ...
UPDATE ...

EXEC sp_X

如果不加这个 GO,sp_X 的内容包含哪些语句?
發糞塗牆 2014-07-18
  • 打赏
  • 举报
回复
go和;功能绝大部分时间是一样的,有些语法必须加go或者;来区分两句,大部分不需要,仅是规范化编程的范畴
百变猪娃娃 2014-07-18
  • 打赏
  • 举报
回复
好吧,我把问题 换个问法,大家看看如何。 SQL语句1 SQL语句2 SQL语句3 执行顺序应该就是 先执行 SQL语句1,然后执行 SQL语句2,最后执行 SQL语句3。 请问,是不是这样的? 如果是这样的,那么何必用GO呢?
Andy-W 2014-07-18
  • 打赏
  • 举报
回复
Go 主要是作為分批處理功能。 Go还有其他用法,如在Go 后面加 数字可以描述这批命令要循环执行多少次, E.g.
use tempdb	
go
print 1
go 3

/*
Beginning execution loop
1
1
1
Batch execution completed 3 times.

*/
霜寒月冷 2014-07-18
  • 打赏
  • 举报
回复
转载的,希望对你有用
GO
用信号通知 Microsoft® SQL Server™ 实用工具一批 Transact-SQL 语句的结束。

语法
GO

注释
GO 不是 Transact-SQL 语句;而是可为 osql 和 isql 实用工具及 SQL Server 查询分析器识别的命令。

SQL Server 实用工具将 GO 解释为应将当前的 Transact-SQL 批处理语句发送给 SQL Server 的信号。当前批处理语句是自上一 GO 命令后输入的所有语句,若是第一条 GO 命令,则是从特殊会话或脚本的开始处到这条 GO 命令之间的所有语句。SQL 查询分析器和 osql 及 isql 命令提示实用工具执行 GO 命令的方式不同。有关更多信息,请参见 osql 实用工具、isql 实用工具和 SQL 查询分析器。 

GO 命令和Transact-SQL 语句不可在同一行上。但在 GO 命令行中可包含注释。

用户必须遵照使用批处理的规则。例如,在批处理中的第一条语句后执行任何存储过程必须包含 EXECUTE 关键字。局部(用户定义)变量的作用域限制在一个批处理中,不可在 GO 命令后引用。

USE pubs
GO
DECLARE @MyMsg VARCHAR(50)
SELECT @MyMsg = 'Hello, World.'
GO -- @MyMsg is not valid after this GO ends the batch.

-- Yields an error because @MyMsg not declared in this batch.
PRINT @MyMsg
GO

SELECT @@VERSION;
-- Yields an error: Must be EXEC sp_who if not first statement in 
-- batch.
sp_who
GO

SQL Server 应用程序可将多条 Transact-SQL 语句作为一个批处理发给 SQL Server 去执行。在此批处理中的语句编译成一个执行计划。程序员在 SQL Server 实用工具中执行特定语句,或生成 Transact-SQL 语句脚本在 SQL Server 实用工具中运行,用 GO 来标识批处理的结束。

如果基于 DB-Library、ODBC 或 OLE DB APIs 的应用程序试图执行 GO 命令时会收到语法错误。SQL Server 实用工具永远不会向服务器发送 GO 命令。

权限
GO 是一个不需权限的实用工具命令。可以由任何用户执行。

示例
下面的示例创建两个批处理。第一个批处理只包含一条 USE pubs 语句,用于设置数据库上下文。剩下的语句使用了一个局部变量,因此所有的局部变量声明必须在一个批处理中。这一点可通过在最后一条引用此变量的语句之后才使用 GO 命令来做到。

USE pubs
GO
DECLARE @NmbrAuthors int
SELECT @NmbrAuthors = COUNT(*)
FROM authors
PRINT 'The number of authors as of ' +
      CAST(GETDATE() AS char(20)) + ' is ' +
      CAST(@NmbrAuthors AS char (10))
GO

marcia_tang 2014-07-18
  • 打赏
  • 举报
回复
http://wenku.baidu.com/link?url=gQQ9EdJm2szPaAu7LWPgNynhV4DMnPEK7f9GWsLcIPoI9PpIAggbgKiyyhirrl-6pCi6kITVnDt_hhRdyE7XXUViQmafZ9tzn9-FlKJSvzO
lakerskobemvp 2014-07-18
  • 打赏
  • 举报
回复
GO表示分批处理,它不是T-sql语句,是编译器识别的命令。有些语句必须第一句执行,比如创建存储过程 create proc XXXX 必须是第一条语句,这时就可以用GO与之前的语句隔离

34,571

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧