標籤:
1. 作用:
向 SQL Server 公用程式發出一批 Transact-SQL 陳述式結束的訊號.
2. 文法:
一批 Transact-SQL 陳述式
GO
如
Select 1
Select 2
Select 3
GO
3. 說明:
1) GO 不是 Transact-SQL 陳述式;
2) 它是 sqlcmd 和 osql 工具 + 生產力以及 SQL Server Management Studio 代碼編輯器識別的命令.
3) SQL Server 應用程式可以將多個 Transact-SQL 陳述式作為一個批發送到 SQL Server 的執行個體來執行.然後,該批中的語句被編譯成一個執行計畫.程式員在 SQL Server 公用程式中執行特殊語句,或產生 Transact-SQL 陳述式的指令碼在 SQL Server 公用程式中運行時,使用 GO 作為批結束的訊號.
4) 如果基於 ODBC 或 OLE DB API 的應用程式試圖執行 GO 命令,會收到語法錯誤.SQL Server 公用程式從不向伺服器發送 GO 命令.
4. 許可權:
GO 是一個不需任何許可權的工具 + 生產力命令.它可以由任何使用者執行.
5. 用法:
1) SQL Server 公用程式將 GO 解釋為應該向 SQL Server 執行個體發送當前批 Transact-SQL 陳述式的訊號.當前批語句由上一 GO 命令後輸入的所有語句組成,如果是第一條 GO 命令,則由即席會話或指令碼開始後輸入的所有語句組成.
Select 1
Select 2
Select 3
GO
—這是一個批
Select 1
GO
Select 2
GO
—這是兩個批
2) GO 命令和 Transact-SQL 陳述式不能在同一行中.但在 GO 命令列中可包含注釋.
Select 1
GO
--會正確輸出結果,列名為”無列名”
Select 1 GO
--會正確輸出結果,列名為”GO”
--由此可知此處的GO並未起到應有的作用;
3) 使用者必須遵照使用批處理的規則.例如,在同一批處理中,建立資料庫之後不能直接使用其建立的資料庫.局部(使用者定義)變數的範圍限制在一個批處理中,不可在 GO 命令後引用.
create database [Roc]
use [Roc]
GO
--運行此批處理後,系統會報錯
--把此批處理分成兩個批即可正確運行
create database [Roc]
GO
use [Roc]
GO declare @Roc varchar(max)
Select @Roc = ‘aking‘
GO
print @Roc
GO
--此為兩個批處理,由於局部變數的範圍要限制在一個批處理中,所以此語句錯誤
--把這兩個批合并為一個批即可正確運行
declare @Roc varchar(max)
Select @Roc = ‘aking‘
print @Roc
GO
4) 不同批處理是分開執行的,一個查詢失敗不會影響另外一個查詢.
Select * from 不存在的表
Select 1
--查詢執行後會報錯,並且不返回任何結果
Select * from 不存在的表
GO
Select 1
GO
--查詢執行會會報錯,但會返回Select 1的結果
5) GO [count] count 為正整數.指定GO 之前的批處理執行指定的次數.
insert [Roc] Select ‘aking‘
GO
--批處理執行1次,向表Roc中插入一行記錄
aking Insert [Roc] Select ‘aking‘
GO 10
--批處理執行10次,向表Roc中插入10行記錄aking
6. 補充:
Select 1
Select * from 不存在的表
Select 3
--查詢結果會報錯,但會返回Select 1的結果
Select * from 不存在的表
Select 1
Select 3
--查詢結果會報錯,且不會返回任何查詢的結果
Select 1
Select * from 不存在的表
Selec 3
--查詢結果會報錯,且不會返回任何查詢的結果,因為第三條查詢語法錯誤;
Select 1
Select * from 不存在的表
GO
Select 3
GO
--查詢結果會報錯,但會返回Select 1 和Select 3的查詢結果
Select * from 不存在的表
GO
Select 1
Select 3
GO
--查詢結果會報錯,但會返回Select 1 和Select 3的查詢結果
Select 1
Select * from 不存在的表
GO
Selec 3
GO
--查詢結果會報錯,但會返回Select 1的結果
USE
改變當前操作資料庫
用法:
USE 資料庫名
例:
CREATE DATABASE XX1 --建立XX1資料庫
………………
GO
CREATE DATABASE XX2 --建立XX2資料庫
………………
GO
USE XX1 --轉到XX1資料庫
GO
………… --對XX1資料庫的操作
GO
USE XX2 --轉到XX2資料庫
GO
………… --對XX2資料庫的操作
GO
USE在預存程序中不能直接使用
但可以這樣用:
create proc test
as
exec(‘use pubs select * from jobs‘) --或者exec(use pubs) exec sp_adduser ‘xxxx‘
go
--使用Exec(ute)語句配合USE來改變當前資料庫,但資料庫環境的更改只在Execute語句結束前有效,所以必須把後面的語句和Execute放到一起
(轉自 http://blog.sina.com.cn/s/blog_5623cddb0100ybbx.html http://blog.csdn.net/nphyez/article/details/41939915 )
檢索08- SQL語句中的go與use用法