SQL Server一直看到各种SQL语句中间夹杂着那么几个看似毫无意义的GO,看着就让人莫名难受,现在于知道了这个传说中可以忽略的GO究竟是干嘛的了。
官方说法是:GO只是SQL Server管理器(SSMS)中用来提交T-SQL语句的一个标志
我的理解是:GO相当于一个.sql文件的结束标记
我这么说大家可能不是很清楚我想表达的意思,下面我来解释一下:
大家都用过这个按钮吧,这儿按钮就是新建一个.sql后缀名的SQL语句脚本文件,通常情况下,我们会在里面打各种SQL语句,然后按一下F5或者
去执行这些语句。
下面我们来输入一些语句看一下不使用GO和使用GO的区别:
示例一:
declare @a int
set @a=1
select @a
执行结果:
declare @a int
go
set @a=1
select @a
执行结果:
总结:我们都知道如果一个变量@a是声明在a.sql文件中的,那么在b.sql中是不能为@a赋值的,因为这根本就是两个脚本文件。而GO语句正是起到了分割.sql文件的作用。
示例2:
select * from Users
select * from Role
go 2
执行结果
select * from Users
go
select * from Role
go 2
总结:GO 语句后面跟数字代表提交的次数,上图中的第一个GO依然起到了示例1中提到的分割.sql文件的作用。
相信大家在看完了这两个是示例以后已经基本掌握了GO的用法了,所以在日常应用中,尤其是在存储过程中要慎用GO,因为很有可能你的存储过程上半段还创建了一个临时表,然后紧跟了一个GO,那么下半段就别想往这个临时表插数据了,因为他们已经可以算是两个存储过程里的语句了。
最后:
GO不是标准SQL语句,甚至不是T-SQL语句。它只是SQL Server管理器(SSMS)中用来提交T-SQL语句的一个标志。你可以在SSMS中任意指定这个提交标志。SSMS->工具->选项->查询执行->SQL Server->批分隔符中指定这个提交标志。
Mysql中就没有Go的这种用法!