共用方式為


使用查詢編輯器編輯 SQLCMD 腳本

使用 SQL Server Management Studio(SSMS)中的查詢編輯器,以 SQLCMD 腳本撰寫與編輯查詢。 你可以使用 SQLCMD 腳本在同一腳本中處理 Windows 系統指令和 Transact-SQL 語句。

啟用 SQLCMD 模式

若要使用查詢編輯器撰寫或編輯 SQLCMD 腳本,必須啟用 SQLCMD 腳本模式。 SQLCMD 模式預設沒有啟用。 你可以在工具列中選擇 SQLCMD 模式圖示,或從查詢選單中選擇 SQLCMD 模式來啟用腳本模式。

備註

當你啟用 SQLCMD 模式時,查詢編輯器中的 IntelliSense 和 Transact-SQL 除錯器會被關閉。

查詢編輯器中的 SQLCMD 腳本可以使用所有 Transact-SQL 腳本相同的功能。 這些功能包括:

  • 色彩編碼
  • 執行指令碼
  • 源碼管理
  • 解析指令碼
  • 顯示計畫

在查詢編輯器中啟用 SQLCMD 指令碼

要為啟動的查詢編輯器視窗啟用 SQLCMD 腳本,請使用以下步驟進行。

將查詢編輯器視窗切換至 SQLCMD 模式

  1. 在物件總管中,右鍵點擊伺服器,然後選擇 新查詢 以開啟新的查詢編輯器視窗。

  2. 在 [查詢] 功能表上,選取 [SQLCMD 模式]。

    SQLCMD 陳述式是在查詢編輯器的上下文中執行的。

  3. 在 [SQL 編輯器] 工具列的 [可用資料庫] 清單中,選取

  4. 在查詢編輯器視窗中,輸入以下 Transact-SQL 語句及 !!DIR SQLCMD 語句:

    SELECT DISTINCT Type FROM Sales.SpecialOffer;
    GO
    !!DIR
    GO
    SELECT ProductCategoryID, Name FROM Production.ProductCategory;
    GO
    
  5. 按 F5 以執行混合 Transact-SQL 與 MS-DOS 陳述式區段。

    請注意第 1 個和第 3 個陳述式產生的兩個 SQL 結果窗格。

  6. 在 [結果] 窗格中,選取 [訊息] 索引標籤來查看這三個陳述式產生的訊息:

    • (6 row(s) affected)
    • <The directory information>
    • (4 row(s) affected)

這很重要

當你從命令列執行 sqlcmd 時,它允許與作業系統完整互動。 當你在 SQLCMD 模式下使用查詢編輯器時,請小心不要執行互動式語句。 查詢編輯器無法回應作業系統的提示。 想了解更多如何從命令列執行 SQLCMD,請參見 sqlcmd 工具。

依預設,會啟用 SQLCMD 指令碼

若要預設開啟 SQLCMD 指令模式,請在「工具」功能表中選取「選項」,展開「查詢執行」和「SQL Server」,選取「一般」頁面,然後勾選「預設會以 SQLCMD 模式開啟新查詢」方塊。

撰寫和編輯 SQLCMD 指令碼

啟用腳本模式後,你可以同時撰寫 SQLCMD 指令和 Transact-SQL 語句。 適用的規則如下:

  • SQLCMD 命令必須是行中的第一個陳述式。

  • 每行只能有一個 SQLCMD 命令。

  • 你可以在 SQLCMD 指令前加上註解和空白。

  • 不會執行註解字元內的 SQLCMD 命令。

  • 單行註解字元為兩個連字號(--),必須出現在行首。

  • 將作業系統命令前綴加上兩個驚嘆號(!!)。 使用雙驚嘆號的命令會使驚嘆號後的語句用 cmd.exe 命令處理器執行。 之後 !! 的文字會以參數傳遞到 cmd.exe,因此最終的命令列執行為: "%SystemRoot%\system32\cmd.exe /c <text after !!>"

  • 為明確區分 SQLCMD 指令與 Transact-SQL,所有 SQLCMD 指令前置冒號(:)。

  • GO 指令無需前置詞即可使用,也可由 !!: 引導使用。

  • 查詢編輯器支援環境變數以及你在 SQLCMD 腳本中定義的變數,但它不支援內建的 SQLCMD 或 osql 變數。 SSMS 處理 SQLCMD 變數時會區分大小寫。 例如,會 PRINT '$(COMPUTERNAME)' 產生正確結果,但 PRINT '$(ComputerName)' 會回傳錯誤。

謹慎

SSMS 在常規與 SQLCMD 模式下使用 SqlClient .NET 函式庫執行。 當你從 命令列執行查詢時, sqlcmd 會使用 OLE DB 的提供者。 因為可能適用不同的預設選項,你在 SSMS 中以 SQLCMD 模式執行相同查詢時,可能會看到與 sqlcmd 工具中 SQLCMD 模式不同的行為。

支援的 SQLCMD 語法

查詢編輯器支援以下 SQLCMD 腳本關鍵字:

  • [!!:]GO[count]
  • !! <command>
  • :exit(statement)
  • :Quit
  • :r <filename>
  • :setvar <var> <value>
  • :connect server[\instance] [-l login_timeout] [-U user [-P password]] 1
  • :on error [ignore|exit]
  • :error <filename>|stderr|stdout 2
  • :out <filename>|stderr|stdout 2

1 欲了解更多指令 :connect 資訊,請參閱 sqlcmd 工具中的指令

2 查詢編輯器將輸出傳送到Messages標籤的stderrstdout

查詢編輯器不支援前述列表中未包含的 SQLCMD 指令。 當你執行包含不支援的 SQLCMD 關鍵字的腳本時,查詢編輯器會忽略該指令。 對於每個不支援的關鍵字,查詢編輯器會向目的地發送以下訊息:

Ignoring command <ignored_command>

謹慎

由於您未從命令行啟動 SQLCMD,因此在 SQLCMD 模式中執行查詢編輯器時有一些限制。 你無法輸入命令列參數,例如變數。 此外,由於查詢編輯器無法回應作業系統提示,你必須小心不要執行互動式語句。

SQLCMD 指令碼中的色彩編碼

啟用 SQLCMD 腳本時,腳本會以顏色標示。 Transact-SQL 關鍵字的顏色編碼保持不變。 SQLCMD 指令會以陰影背景呈現。

範例

以下範例使用 SQLCMD 陳述式建立一個名為 testoutput.txt的輸出檔案。 它執行兩個 Transact-SQL SELECT 語句和一個作業系統指令,用來列印目前的目錄。 產生的檔案包含該語句的 DIR 訊息輸出以及 Transact-SQL 語句的結果輸出。

:out C:\testoutput.txt
SELECT @@VERSION As 'Server Version';
!!DIR
!!:GO
SELECT @@SERVERNAME AS 'Server Name';
GO