2015-12-24 47 views
1

我的老師最近談到了用於管理工作室的聲明'GOTO',但起初我並不完全理解它。他表示GOTO正在用於跳轉到不同的代碼片段,藉助我可以自己命名的標籤。這是他用來表示他的例子代碼:瞭解T-SQL GOTO

select 'first' 

goto jump 
select 'second' 

jump: 
select 'third' 

當我執行的代碼,果然,它打印「第一」和「第三」。我現在的問題是,首先在那裏選擇'第二'是什麼?

+4

'GOTO'是一種控制查詢流的方法。在實際使用中,會出現一個條件,您需要滿足(例如'IF SomeCol ='SomeValue'GOTO jump')'GOTO'。在所提供的示例中,唯一使用'SELECT'second''是爲了說明當你使用'GOTO'時,該代碼被跳過。 – Siyual

+1

至於爲什麼它在那裏首先這是一個壞榜樣。一個更好的例子是:https://msdn.microsoft.com/en-us/library/ms180188.aspx在這種情況下,而不是在代碼中嵌入代碼,你使用goto來調用代碼。如果多個if語句可以調用相同的goto,則重構代碼以實現易讀性;並減少複製/粘貼。但是大多數人會用必要的代碼創建一個函數/過程並調用它;這就是爲什麼GoTo不是一個流行的選擇。 – xQbert

回答

3

這是有點長的評論。

在你的例子中,第二個select顯然是不必要的。

GOTO是程序代碼的「控制流程」的一個例子。它是來自最早的計算機語言的結構,它直接映射到處理C或彙編代碼等語言時硬件的工作方式。從那以後,它已被包含在其他許多語言中。

GOTO通常會與IF一起使用。然而,T-SQL提供了更好的控制流的功能,如:

  • WHILE
  • IF/BEGIN
  • TRY/CATCH

在一般情況下,你應該使用這些結構,而不是GOTO。事實上,GOTO是相當有爭議的。許多人認爲它總是一個糟糕的代碼的標誌(「意大利麪代碼」有時用來描述這種類型的代碼)。其他人會對異常處理(我有時會這樣做)或某些類型的狀態機這樣的事情做出非常罕見的例外。

在我看來,GOTO只應在所有其他結構之後教授,並且只能用於非常特定的目的。

+0

非常感謝! –