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的結果
1 注釋
單行注釋:--
多行注釋:
2 結束T-sql語句
在每個指令後用分号“;”表示結束,但是分号是可選擇的,不要也可以
不要在try end 後面添加分号
不要在 if 後面添加分号
必須在get 之前添加分号
3遊标
概念:遊标實際上是使用者在系統中開設的一個資料緩沖區,存放SQL語句的執行結果。
遊标的使用:遊标中存放查詢結果的一組記錄,使用者可以通過移動遊标指針逐一通路記錄,
并賦給主變量,交由主語言進行進一步處理。
使用遊标的五個步驟:
1,聲明遊标
2,打開遊标
3,利用遊标讀取、修改或删除所取的行
4,關閉遊标
5,釋放遊标
4 字元串連接配接符+
SELECT 'WQJFF'+'88KK'
--while 語句
declare @i int
set @i = 1
while @i <= 10
begin
print @i
set @[email protected] + 1
end
5 waitfor
waitfor delay '00:00:01'
print '哈哈,現在是10點41'
waitfor time '10:41'
print '哈哈,現在是10點41'
SELECT * FROM SYS.MESSAGES
6 CHARINDEX
CHARINDEX ( char1 ,string1 [ , start_location ] )
char1 一個表達式,其中包含要查找的字元的序列。
string1 一個表達式,通常是一個為指定序列搜尋的列。string1 屬于字元串資料類别。
start_location 開始在 string1 中搜尋 char1 時的字元位置。
如果 start_location 未被指定、是一個負數或零,則将從 string1 的開頭開始搜尋。start_location 可以是 bigint 類型。
string1 中包含 char1 時傳回字元位置
string1 中不包含 char1 時傳回0
SELECT CHARINDEX('Q','WQFDF')
傳回2
SELECT CHARINDEX('WQFDF','Q')
傳回0
如果 char1 或 string1 之一為 NULL,并且資料庫相容級别為 70 或更高,則 CHARINDEX 将傳回 NULL。如果資料庫相容級别為 65 或更低,則 CHARINDEX 将僅在 char1 和 string1 都為 NULL 時才傳回 NULL 值。
SELECT CHARINDEX(NULL,'12345')
傳回NULL
轉至http://blog.sina.com.cn/s/blog_5623cddb0100ybbx.html
轉載于:https://www.cnblogs.com/keepSmile/p/4738685.html