2011-03-27 74 views
4

我沒有什麼用TSQL和SQL Server沒有經驗 - 所以MySQL時我想執行語句,我只是寫:爲了執行SQL服務器語句,我是否必須編寫「GO」字?

Select * from users 

...然後按回車。

但是現在我看到很多SQL Server教程,每個語句後都有GO字。我必須寫這個嗎?例如:

Select * from users; GO 

或者,我可以簡單的寫:

Select * from users; <enter key pressed...> 

回答

7

在SQL Server中,go分離查詢批次。在大多數情況下它是可選的。

在早期版本的SQL Server,你必須做一個go變更表,如後:

alter table MyTable add MyColumn int 
go 
select MyColumn from MyTable 

如果沒有,則SQL Server將解析查詢批處理,並抱怨說MyColumn沒不存在。見MSDN

SQL Server實用解釋GO作爲 信號,他們應該在 當前批的Transact-SQL語句 的發送到SQL Server實例。目前一批 報表是由自上次GO, 或自專案 會話或腳本的開始,如果這是第一次 GO輸入的所有 語句。

+0

10倍...有趣。 – leo 2011-03-27 16:57:14

+0

而不是輸入,你可以按F5來執行查詢 – BlackTigerX 2011-03-27 18:30:47

+0

@leo:還有一件事,雖然你會在Andomar鏈接的頁面上找到它,但應該清楚地說明:'GO不是Transact-SQL語句;它是由sqlcmd和osql實用程序以及SQL Server Management Studio代碼編輯器識別的命令。即,請記住不要在客戶端的查詢中使用它,因爲引擎不會識別它,但會引發語法錯誤。 – 2011-03-27 18:46:13

0

您不需要。 GO將執行每條語句(至少在Sql Server中)

1

Go是可選的,不需要在sql語句中寫入它。

0

正如其他答覆者在我之前所說,你並不需要Go

只有一種情況需要使用它,那就是當你想創建一個表或視圖,然後從中選擇。

例如:

create view MyView as select * from MyTable 
go 
select * from MyView 

沒有Go,因爲select語句不是有效的SQL Server將不執行這一點,因爲視圖不會在那一刻存在。

+0

不正確。因爲它表示CREATE語句的結尾,所以需要「GO」的原因。由於SQL Server 2005中存在語句級編譯,如果對象當前不存在,編譯會延遲。 – 2011-03-27 19:05:03

+0

是的,這是真的。我只是在SQL Server 2008 R2上試了一下 - 沒有運行,查詢無法運行。 – 2011-03-27 21:08:19

+1

我知道它沒有運行。但不是因爲你的建議。 'exec('創建視圖MyView作爲select * from MyTable');選擇*從MyView'工作正常。如果將鼠標懸停在SSMS中的紅色波浪線上,您將看到實際的投訴是「CREATE VIEW必須是批處理中的唯一聲明」。還可以嘗試'create table mytable(c int);選擇* from mytable' – 2011-03-27 21:11:08

2

GO分離批次,正如Andomar寫的。

某些SQL語句(例如CREATE SCHEMA)需要是批次中的第一個或唯一的語句。例如,MSDN狀態

CREATE PROCEDURE語句不能 可以在單一批次其它Transact-SQL語句 結合。

局部變量也限制爲一個批次,因此在GO之後無法訪問。