Share via


利用查詢編輯器來編輯 SQLCMD 指令碼

更新: 2006 年 7 月 17 日

您可以利用 Microsoft SQL Server 查詢編輯器,將查詢撰寫和編輯成 SQLCMD 指令碼。查詢編輯器中的 SQLCMD 指令碼可以使用所有 Transact-SQL 指令碼都使用的相同功能。這些功能包括:

  • 色彩編碼
  • 執行指令碼
  • 原始檔控制
  • 剖析指令碼
  • 顯示計劃

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

若要利用 SQL Server 查詢編輯器來撰寫或編輯 SQLCMD 指令碼,您必須啟用指令碼模式。依預設,查詢編輯器不會啟用指令碼模式。您可以按一下工具列上的 [SQLCMD 模式] 圖示,或從 [查詢] 功能表中選取 [SQLCMD 模式] 來啟用指令碼模式。這些方法會開啟目前視窗的 SQLCMD 指令碼。

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

  1. 在 [物件總管] 中,以滑鼠右鍵按一下伺服器,再按一下 [新增查詢] 來開啟新的 [查詢編輯器] 視窗。

  2. [查詢] 功能表上,按一下 [SQLCMD 模式]

    此時 [查詢編輯器] 會在 [查詢編輯器] 的內容中執行 sqlcmd 陳述式。

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

  4. 在 [查詢編輯器] 視窗中,輸入下列兩個 Transact-SQL 陳述式和 !!DIRsqlcmd 陳述式:

    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 個資料列受到影響)
    • <目錄資訊>
    • (4 個資料列受到影響)
ms174187.note(zh-tw,SQL.90).gif重要事項:
當從命令列執行時,sqlcmd 公用程式可讓您與作業系統充分互動。當您在 [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 變數。
ms174187.Caution(zh-tw,SQL.90).gif注意:
SQL Server Management Studio 利用 Microsoft .NET SqlClient 來執行正規和 SQLCMD 模式。當從命令列執行時,SQLCMD 會使用 OLE DB 提供者。由於可能套用不同的預設選項,因此,在 SQL Server Management Studio 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]]

:on error [ignore|exit]

:error <filename>|stderr|stdout

:out <filename>|stderr|stdout

ms174187.note(zh-tw,SQL.90).gif附註:
對於 :error:out 而言,stderrstdout 都會將輸出傳到訊息索引標籤。

查詢編輯器不支援上面所未列出的 SQLCMD 命令。當執行包含不支援的 SQLCMD 關鍵字之指令碼時,查詢編輯器會傳送一則「忽略命令 <ignored command>」訊息給每個不支援的關鍵字之目的地。指令碼將順利執行,但會忽略不支援的命令。

ms174187.Caution(zh-tw,SQL.90).gif注意:
由於您不是從命令列啟動 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

請參閱

其他資源

sqlcmd 公用程式
SQL Server Management Studio 教學課程

說明及資訊

取得 SQL Server 2005 協助

變更歷程記錄

版本 歷程記錄

2006 年 7 月 17 日

新增內容:
  • 加入將 [查詢編輯器] 視窗切換成 SQLCMD 模式的程序。

2005 年 12 月 5 日

變更的內容:
  • 更正與 GO 有關的語法。
  • 加入範例。
  • 合併 SQLCMD 模式主題的內容