A. 使用 sqlcmd 執行指令碼
啟動「記事本」,然後輸入下列 Transact-SQL 陳述式:
USE AdventureWorks;
GO
SELECT TOP (5) ContactID, FirstName, LastName
FROM Person.Contact;
GO
建立名為 MyFolder 的資料夾,然後在資料夾 C:\MyFolder 中將指令碼儲存為檔案 MyScript.sql。在命令提示字元中輸入下列命令,以執行指令碼並將輸出存放在 MyFolder 的 MyOutput.txt 中:
sqlcmd -i C:\MyFolder\MyScript.sql -o C:\MyFolder\MyOutput.txt
當您在「記事本」中檢視 MyOutput.txt 的內容時,會看到下列項目:
Changed database context to 'AdventureWorks'.
ContactID FirstName LastName
----------- ----------- -----------
1 Syed Abbas
2 Catherine Abel
3 Kim Abercrombie
4 Humberto Acevedo
5 Pilar Ackerman
(5 rows affected)
B. 透過專用管理連接來使用 sqlcmd
在下列範例中,使用 sqlcmd 透過專用管理員連接 (DAC) 連接到發生封鎖問題的伺服器。
C:\>sqlcmd -S ServerName -A
1> SELECT blocked FROM sys.dm_exec_requests WHERE blocked <> 0;
2> GO
以下為結果集:
spid blocked
------ -------
62 64
(1 rows affected)
使用 sqlcmd 結束封鎖處理序。
1> KILL 64;
2> GO
C. 使用 sqlcmd 執行預存程序
下列範例顯示如何使用 sqlcmd 來執行預存程序。建立下列預存程序。
USE AdventureWorks;
IF OBJECT_ID ( ' dbo.ContactEmailAddress, 'P' ) IS NOT NULL
DROP PROCEDURE dbo.ContactEmailAddress;
GO
CREATE PROCEDURE dbo.ContactEmailAddress
(
@FirstName nvarchar(50)
,@LastName nvarchar(50)
)
AS
SET NOCOUNT ON
SELECT EmailAddress
FROM Person.Contact
WHERE FirstName = @FirstName
AND LastName = @LastName;
SET NOCOUNT OFF
在 sqlcmd 提示字元中,輸入下列命令:
C:\sqlcmd
1> :Setvar FirstName Gustavo
1> :Setvar LastName Achong
1> EXEC dbo.ContactEmailAddress $(Gustavo),$(Achong)
2> GO
EmailAddress
-----------------------------
gustavo0@adventure-works.com
D. 使用 sqlcmd 進行資料庫維護
下列範例顯示如何使用 sqlcmd 進行資料庫維護工作。以下列程式碼建立 C:\BackupTemplate.sql。
USE master;
BACKUP DATABASE [$(db)] TO DISK='$(bakfile)';
在 sqlcmd 提示字元中,輸入下列命令:
C:\ >sqlcmd
1> :connect <server>
Sqlcmd: Successfully connected to server <server>.
1> :setvar db msdb
1> :setvar bakfile c:\msdb.bak
1> :r c:\BackupTemplate.sql
2> GO
Changed database context to 'master'.
Processed 688 pages for database 'msdb', file 'MSDBData' on file 2.
Processed 5 pages for database 'msdb', file 'MSDBLog' on file 2.
BACKUP DATABASE successfully processed 693 pages in 0.725 seconds (7.830 MB/sec)
E. 使用 sqlcmd 在多個執行個體上執行程式碼
下列在檔案中的程式碼會顯示連接到兩個執行個體的指令碼。請注意,GO 是在連接第二個執行個體之前出現。
:CONNECT <server>\,<instance1>
EXEC dbo.SomeProcedure
GO
:CONNECT <server>\,<instance2>
EXEC dbo.SomeProcedure
GO
E. 傳回 XML 輸出
下列範例顯示 XML 輸出如何在連續資料流中傳回未格式化的資料。
C:\>sqlcmd -d AdventureWorks
1> :XML ON
1> SELECT TOP 4 FirstName + ' ' + LastName + ', '
2> FROM Person.Contact
3> GO
Gustavo Achong, Catherine Abel, Kim Abercrombie, Humberto Acevedo,
F. 在 Windows 指令碼檔案中使用 sqlcmd
sqlcmd 命令 (例如 sqlcmd -i C:\InputFile.txt -o C:\OutputFile.txt, ) 可以在 .bat 檔案中與 VBScript 一起執行。在這種情況下,不要使用互動選項。sqlcmd 必須安裝在執行 .bat 檔案的電腦上。
首先,建立下列四個檔案:
-
C:\badscript.sql
SELECT batch_1_this_is_an_error
GO
SELECT 'batch #2'
GO
-
C:\goodscript.sql
SELECT 'batch #1'
GO
SELECT 'batch #2'
GO
-
C:\returnvalue.sql
:exit(select 100)
@echo off
C:\windowsscript.bat
@echo off
echo Running badscript.sql
sqlcmd -i badscript.sql -b -o out.log
if not errorlevel 1 goto next1
echo == An error occurred
:next1
echo Running goodscript.sql
sqlcmd -i goodscript.sql -b -o out.log
if not errorlevel 1 goto next2
echo == An error occurred
:next2
echo Running returnvalue.sql
sqlcmd -i returnvalue.sql -o out.log
echo SQLCMD returned %errorlevel% to the command shell
:exit
然後,在命令提示字元中執行 C:\windowsscript.bat:
C:\>windowsscript.bat
Running badscript.sql
== An error occurred
Running goodscript.sql
Running returnvalue.sql
SQLCMD returned 100 to the command shell