本科里學了那么多年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->批分隔符中指定這個提交標志。如下圖: