本科里学了那么多年SQL Server一直看到书上各种SQL语句中间夹杂着那么几个看似毫无意义的GO,看着就让人莫名,问老师,老师一般只会告诉你,不要理他,这个东西没用的。但是个性纠结并且有轻微强迫症的博主我是不能容忍这种事情的发生的啊!所以终于在若干年后的今天,博主我经过一番研究之后终于知道了这个传说中可以忽略的GO究竟是干嘛的了。
官方说法是:GO只是SQL Server管理器(SSMS)中用来提交T-SQL语句的一个标志
我的理解是:GO相当于一个.sql文件的结束标记
我这么说大家可能不是很清楚我想表达的意思,下面我来解释一下:
大家都用过这个按钮吧,这儿按钮就是新建一个.sql后缀名的SQL语句脚本文件,通常情况下,我们会在里面打各种SQL语句,然后按一下F5或者去执行这些语句。
下面我们来输入一些语句看一下不使用GO和使用GO的区别:
示例1:
- <span style="font-size:12px;">declare @a int
- set @a=1
- select @a</span>
执行结果:
- <span style="font-size:12px;">declare @a int
- go
- set @a=1
- select @a</span>
执行结果:
总结:我们都知道如果一个变量@a是声明在a.sql文件中的,那么在b.sql中是不能为@a赋值的,因为这根本就是两个脚本文件。而GO语句正是起到了分割.sql文件的作用。
示例2:
- select * from dbo.MSdbms
- select * from dbo.backupfile
- go 2
执行结果:
- select * from dbo.MSdbms
- go
- select * from dbo.backupfile
- go 2
执行结果:
总结:GO 语句后面跟数字代表提交的次数,上图中的第一个GO依然起到了示例1中提到的分割.sql文件的作用。
相信大家在看完了这两个是示例以后已经基本掌握了GO的用法了,所以在日常应用中,尤其是在存储过程中要慎用GO,因为很有可能你的存储过程上半段还创建了一个临时表,然后紧跟了一个GO,那么下半段就别想往这个临时表插数据了,因为他们已经可以算是两个存储过程里的语句了。
最后给大家加介绍一个小技巧:
GO不是标准SQL语句,甚至不是T-SQL语句。它只是SQL Server管理器(SSMS)中用来提交T-SQL语句的一个标志。你可以在SSMS中任意指定这个提交标志。SSMS->工具->选项->查询执行->SQL Server->批分隔符中指定这个提交标志。如下图: