搜索
您的当前位置:首页正文

SQL server中的GO详解

来源:步旅网

经常看到各种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()的结果。

因篇幅问题不能全部显示,请点此查看更多更全内容

Top