利用查詢編輯器來編輯 SQLCMD 指令碼
更新: 2006 年 7 月 17 日
您可以利用 Microsoft SQL Server 查詢編輯器,將查詢撰寫和編輯成 SQLCMD 指令碼。查詢編輯器中的 SQLCMD 指令碼可以使用所有 Transact-SQL 指令碼都使用的相同功能。這些功能包括:
- 色彩編碼
- 執行指令碼
- 原始檔控制
- 剖析指令碼
- 顯示計劃
在查詢編輯器中啟用 SQLCMD 指令碼
若要利用 SQL Server 查詢編輯器來撰寫或編輯 SQLCMD 指令碼,您必須啟用指令碼模式。依預設,查詢編輯器不會啟用指令碼模式。您可以按一下工具列上的 [SQLCMD 模式] 圖示,或從 [查詢] 功能表中選取 [SQLCMD 模式] 來啟用指令碼模式。這些方法會開啟目前視窗的 SQLCMD 指令碼。
將查詢編輯器視窗切換到 SQLCMD 模式
在 [物件總管] 中,以滑鼠右鍵按一下伺服器,再按一下 [新增查詢] 來開啟新的 [查詢編輯器] 視窗。
在 [查詢] 功能表上,按一下 [SQLCMD 模式]。
此時 [查詢編輯器] 會在 [查詢編輯器] 的內容中執行 sqlcmd 陳述式。
在 [SQL 編輯器] 工具列的 [可用的資料庫] 清單中,選取 [AdventureWorks]。
在 [查詢編輯器] 視窗中,輸入下列兩個 Transact-SQL 陳述式和
!!DIR
sqlcmd 陳述式:SELECT DISTINCT Type FROM Sales.SpecialOffer; GO !!DIR GO SELECT ProductCategoryID, Name FROM Production.ProductCategory; GO
按 F5 來執行混合 Transact-SQL 和 MS-DOS 陳述式的整個區段。
請注意第 1 個和第 3 個陳述式產生的兩個 SQL 結果窗格。
在 [結果] 窗格中,按一下 [訊息] 索引標籤來查看這三個陳述式產生的訊息:
- (6 個資料列受到影響)
- <目錄資訊>
- (4 個資料列受到影響)
![]() |
---|
當從命令列執行時,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 變數。
![]() |
---|
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
![]() |
---|
對於 :error 和 :out 而言,stderr 和 stdout 都會將輸出傳到訊息索引標籤。 |
查詢編輯器不支援上面所未列出的 SQLCMD 命令。當執行包含不支援的 SQLCMD 關鍵字之指令碼時,查詢編輯器會傳送一則「忽略命令 <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
請參閱
其他資源
sqlcmd 公用程式
SQL Server Management Studio 教學課程
說明及資訊
變更歷程記錄
版本 | 歷程記錄 |
---|---|
2006 年 7 月 17 日 |
|
2005 年 12 月 5 日 |
|