我可以刪除 SSMS 中對“GO”的需要嗎?
有沒有辦法讓每個語句立即發送到伺服器,或者在 SSMS 中以自己的批次發送?
我正在處理大量語句,在這些語句中我更改表、禁用/啟用時間歷史、更改值等,而 SSMS 似乎在很大程度上阻礙了我的工作。如果我在 CLI 中正常執行命令,或者手動選擇並執行,它可以工作。但是,出於某種原因,在 SSMS 中,我需要在所有內容
go
之間插入語句才能使其正常工作。例如,添加一列然後更新它的值,如果沒有
go
它告訴我列名無效,go
它會按預期工作。我只能想像 SSMS 以某種方式解釋命令並將其與表的概念進行比較並導致“錯誤”——而不是伺服器。我更喜歡
go away
在整個集合/文件的開頭這樣的語句,以使其實際按原樣執行每一行。這可能嗎?
簡短的回答是否定的,它不能被關閉。
GO 是一個“批處理終結者”。當 SSMS 執行“語句”時,它們被“批處理”在一起。這可能是單個查詢,沒有“GO”的整個腳本,也可能是“GO”之間的程式碼。
這就是為什麼當您嘗試添加一列並一次更新它時遇到錯誤的原因。它們需要作為單獨的批次執行。
也有可能,假設您將 3 個語句分成多個批次,腳本中的單個批次可能會失敗,但不會導致整個腳本失敗。
Query1 -- success GO Query2 -- failed GO Query3 -- success GO
GO 不是 Transact SQL 語句,它是 SSMS 和 sqlcmd 辨識的命令。有關詳細資訊,請參閱MSDN 上的此處。
您還會發現變數在 GO 語句之後不會持續存在,必須重新聲明或修改您的語句/批處理序列。
順便說一句,您不必使用“GO”作為批處理終止器,您可以使用任何東西。它可以在查詢執行下的工具–>選項菜單中修改。但請注意,更改它並使用不同的東西僅適用於您正在使用的 SSMS 副本。如果您在一個團隊中工作,並且團隊中的每個成員都沒有更改為使用“NewBatch”關鍵字,那麼腳本將在他們的 SSMS 副本中失敗(因為我相當有信心它在 sqlcmd 中也是如此!)。