GO相当于一个文件的分隔标志
如下面的语句:
declare @a int
set @a=1
select @a
可以正常输出
如果加上GO换成下面这样:
declare @a int
go
set @a=1
select @a
会提示报错:
我们都知道如果一个变量@a是声明在a.sql文件中的,那么在b.sql中是不能为@a赋值的,因为这根本就是两个脚本文件。而GO语句正是起到了分割.sql文件的作用。
在日常应用中,尤其是在存储过程中要慎用GO,因为很有可能你的存储过程上半段还创建了一个临时表,然后紧跟了一个GO,那么下半段就别想往这个临时表插数据了,因为他们已经可以算是两个存储过程里的语句了。
GO不是标准SQL语句,甚至不是T-SQL语句。它只是SQL Server管理器(SSMS)中用来提交T-SQL语句的一个标志。你可以在SSMS中任意指定这个提交标志。SSMS->工具->选项->查询执行->SQL Server->批分隔符中指定这个提交标志。
如下图:
在不同的数据库客户端有不同GO用法:
如在SSMS中:
GO
select * from table
GO
可以正常查询,在Navicat中查询报错,必须把第一个GO去掉