天天看點

T-sql語句中GO的作用及文法【轉】

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