T-SQL中GO的意思

转载 2012年03月26日 15:39:58

go 是SYBASE和SQL Server中用来表示事物结束,提交并确认结果,相当于ORACLE的Commit

SQL Server 实用工具将 GO 解释为应将当前的 Transact-SQL 批处理语句发送给 SQL Server 的信号。当前批处理语句是自上一 GO 命令后输入的所有语句,若是第一条 GO 命令,则是从特殊会话或脚本的开始处到这条 GO 命令之间的所有语句。

局部(用户定义)变量的作用域限制在一个批处理中,不可在 GO 命令后引用。

GO代表一个批处理的结束;
你可以把每个GO之间的语句当成是一句SQL;
GO不是标准的语法,只是查询分析器为了区分多个批处理而设的分隔符而已;

具体的如下

  1. CREATE TABLE TableName  
  2. (  
  3.   ColumnName1 DataType,  
  4.   ColumnName2 DataType  
  5. )  
  6. GO  
  7.  
  8. INSERT INTO TableName(ColumnName1,ColumnName2)  
  9. VALUES (Value1,Value2)  
  10. GO 

在解析和执行的时候这一篇T-SQL脚本其实是被认为是两个独立的部分,只不过他们使用同一个Session

举一个最有说服力的例子

  1. DECLARE @Parameter1 INT 
  2. DECLARE @Parameter2 INT 
  3.  
  4. -- If insert "GO" to there...   
  5. -- "GO"  
  6. -- Result:  
  7. -- Msg 137, Level 15, State 1, Line 1  
  8. -- Must declare the scalar variable "@Parameter1".  
  9. -- Msg 137, Level 15, State 1, Line 2  
  10. -- Must declare the scalar variable "@Parameter2".  
  11. -- Msg 137, Level 15, State 2, Line 4  
  12. -- Must declare the scalar variable "@Parameter1".  
  13. SET @Parameter1 = 1  
  14. SET @Parameter2 = 2  
  15.  
  16. PRINT @Parameter1 + @Parameter2  
  17. GO  
  18. -- Result: 3 

当你在使用的变量以前插入了一个GO,这个GO之前脚本会作为一个提交部分,而这个GO以后的部分会作为第二个部分进行提交

P.S. 这里说的提交仅是提交SQL代码,不会提交"GO"这个关键字

我们还需要留意以下特殊注意事项:

1 与GO同一行,GO前边不能包含任何SQL

2 与GO同一行,GO后边可以跟 -- 注释,但是不能跟 /**/ 注释!

这个问题情况大家都不会这样写,所以遇到的几率很小,但是有一个原因引发第1个问题的情况值得大家注意×SQL脚本的文本格式,最好编码完成后检查一下文本格式选择UTF,否则可能你看到自己是换行了,但是在SQL解析的时候会认为他们在同一行,这样的情况当你越检查越会觉得SQL写得很对,但是... ... 但是它始终告诉你语法错误... ... 一定小心... ... 昨天我就傻傻的在那里调了一天... ... 彻底的郁闷了... ... 呵呵

下边再说一个GO的特性,但是我们大家都不常用,或者说我们由于GO太常见而忽略掉了它的这个重要的特性,就是 -- GO是可以代替我们做重复操作的!!

  1. -- INSERT TABLE TableName(Column1, Column2)  
  2. -- VALUES (Value1, Value2)  
  3. -- GO [Number] 这里的Number必须是正整数!  
  4.  
  5. INSERT TABLE TableName(Column1, Column2)  
  6. VALUES (Value1, Value2)  
  7. GO 100  
  8. -- 在这里我们会看到GO加了100次重复操作,  
  9. -- 同时在SSMS窗口智能感知的时候会用红线告诉我们语法不对  
  10. -- 但是请放心执行,他100%能通过,同时必定为你运行100次  

SQL Server 中 GO 的用法

本科里学了那么多年SQL Server一直看到书上各种SQL语句中间夹杂着那么几个看似毫无意义的GO,看着就让人莫名,问老师,老师一般只会告诉你,不要理他,这个东西没用的。但是个性纠结并且有轻微强迫症...
  • zhangqidashu
  • zhangqidashu
  • 2013年12月10日 21:26
  • 11710

SQL Server Go 语句

go 是SYBASE和SQL Server中用来表示事物结束,提交并确认结果,相当于ORACLE的CommitSQL Server 实用工具将 GO 解释为应将当前的 Transact-SQL 批处理...
  • u013160017
  • u013160017
  • 2015年10月19日 01:50
  • 1700

SQL 加go 和不加go的区别

    举个例子.(一)insert a  from select * from b  ---1     go     insert a from select * from c        ---...
  • wobuwei
  • wobuwei
  • 2009年08月20日 16:12
  • 4766

sql中go 的作用

在批处理sql语句时,常在语句的结尾加入Go,Go在语句中可以界定一段语句的结尾,如变量的作用范围等。在Go 语句之前加入Return 可以跳出Go 语句段。break可以跳出While 循环。GO ...
  • laolaowhn
  • laolaowhn
  • 2007年07月17日 14:19
  • 3400

[SQL Server ] GO语句的使用

GO语句 每个被GO分隔的语句都是独立的事务,一个语句执行失败不会影响其它语句执行: go select * from dbo.XXX go select * from dbo...
  • ALDNOAH_ZERO
  • ALDNOAH_ZERO
  • 2016年10月10日 19:29
  • 751

Go语言中查询SqlServer数据库

一、Go语言中查询MsSQL数据库:    // main.go package main import ( "database/sql" "fmt" "lo...
  • twtydgo
  • twtydgo
  • 2017年12月08日 10:35
  • 98

SYBASE数据库支持与不支持的子查询语句的归纳总结

 SYBASE数据库支持与不支持的子查询语句的归纳总结【 文章摘要 】“SYBASE数据库不支持子查询,所以……”,在数据库开发中我们常常听到这样的话语,SYBASE数据库真是如此吗?让我们一起走进S...
  • liuzh501448
  • liuzh501448
  • 2007年04月10日 15:49
  • 5051

数据库 T-SQL 里的 GO 是什么意思

GO代表一个批处理的结束 你可以把每个GO之间的语句当成是一句SQL GO不是标准的语法,只是查询分析器为了区分多个批处理而设的分隔符而已...
  • foreverhuylee
  • foreverhuylee
  • 2014年06月06日 10:06
  • 2491

T-SQL中GO的意思

go 是SYBASE和SQL Server中用来表示事物结束,提交并确认结果,相当于ORACLE的Commit SQL Server 实用工具将 GO 解释为应将当前的 Transact-SQL...
  • xmlxh
  • xmlxh
  • 2014年03月23日 23:51
  • 432

Sybase ASE 查询当前版本和所有数据库

Sybase ASE 查询当前版本和所有数据库
  • wengyupeng
  • wengyupeng
  • 2015年07月27日 14:17
  • 4191
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:T-SQL中GO的意思
举报原因:
原因补充:

(最多只允许输入30个字)