经常看到各种SQL语句中间夹杂着那么几个看似毫无意义的GO,这个Go的作用是什么呢?
官方说法是:GO只是SQL Server管理器(SSMS)中用来提交T-SQL语句的一个标志
我的理解是:GO相当于一个.sql文件的结束标记
我这么说大家可能不是很清楚我想表达的意思,下面我来解释一下:
大家都用过这个
下面我们来输入一些语句看一下不使用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文件的作用。
再看一个例子:
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分隔的语句都是一个单独的事务,一个语句执行失败不会影响其它语句执行。
例如:
首先同时执行下边的语句
select * from sysobjects where id=a
select getdate()
你会发现会报错,并且不会显示任何结果集
而你再执行
select * from sysobjects where id=a
go
select getdate()
go
你会发现尽管同样会报错,但结果集中包含select getdate()的结果。
因篇幅问题不能全部显示,请点此查看更多更全内容