SQL SERVER 2008 sqlcmd 實(shí)用工具![]()
sqlcmd (c:\Program Files\Microsoft SQL
Server\100\Tools\Binn)實(shí)用工具是一個(gè) Microsoft Win32 命令提示實(shí)用工具,用于
Transact-SQL 語句和腳本的即席、交互執(zhí)行以及 Transact-SQL 腳本撰寫任務(wù)的自動(dòng)化。若要以交互方式使用
sqlcmd,或要生成可使用 sqlcmd
運(yùn)行的腳本文件,用戶需要了解 Transact-SQL。通常以下列方式使用 sqlcmd 實(shí)用工具:
最常用的選項(xiàng)如下:
以下是 sqlcmd 實(shí)用工具的常見用法:
您可以使用 sqlcmd 實(shí)用工具以交互方式在命令提示符窗口中執(zhí)行 Transact-SQL 語句。若要使用 sqlcmd 以交互方式執(zhí)行 Transact-SQL 語句,請?jiān)谖词褂?-Q、-q、-Z 或 -i 選項(xiàng)指定任何輸入文件或查詢的情況下運(yùn)行實(shí)用工具。例如: sqlcmd -S \ 在未指定輸入文件或查詢的情況下執(zhí)行命令時(shí),sqlcmd 連接到 SQL Server 的指定實(shí)例,然后顯示一個(gè)新行,其中包含 1> 并且后面跟著一個(gè)閃爍的下劃線(稱為 sqlcmd 提示符)。1 表示這是 Transact-SQL 語句的第一行,而 sqlcmd 提示符則是您鍵入 Transact-SQL 語句的起點(diǎn)。 在 sqlcmd 提示符中,可以鍵入 Transact-SQL 語句和 sqlcmd 命令,如 GO 和 EXIT。每個(gè) Transact-SQL 語句放在稱為“語句緩存”的緩沖區(qū)中。鍵入 GO 命令并按 Enter 鍵后,這些語句將發(fā)送到 SQL Server。若要退出 sqlcmd,請?jiān)谛滦虚_始處鍵入 EXIT 或 QUIT。 若要清除語句緩存,請鍵入 :RESET。鍵入 ^C 將使 sqlcmd 退出。在發(fā)出 GO 命令后,還可以用 ^C 停止語句緩存的執(zhí)行。 通過在 sqlcmd 提示符中輸入 :ED 命令,可以編輯交互式會話中輸入的 Transact-SQL 語句。編輯器將打開,編輯 Transact-SQL 語句并關(guān)閉編輯器后,修改后的 Transact-SQL 語句將顯示于命令窗口中。輸入 GO以運(yùn)行修改后的 Transact-SQL 語句。 用引號引起來的字符無需任何額外的預(yù)處理即可使用。例外,輸入兩個(gè)連續(xù)的引號可以將引號插入字符串中,SQL Server 將這種字符序列視作一個(gè)引號。(但在服務(wù)器上會進(jìn)行轉(zhuǎn)換。)當(dāng)腳本變量出現(xiàn)在字符串中時(shí),不會展開它們。 例如: sqlcmd PRINT "Length: 5"" 7'" GO 下面是結(jié)果集。 Length: 5" 7' sqlcmd 支持包含跨多行的字符串的腳本。例如,下面的 SELECT 語句跨多行,但鍵入 GO 并按 Enter 鍵后,將執(zhí)行單個(gè)字符串。 SELECT First line FROM Second line WHERE Third line GO 本示例說明了以交互方式運(yùn)行 sqlcmd 的過程。 打開命令提示符窗口時(shí),出現(xiàn)如下一行內(nèi)容: C:\> _ 這表示文件夾 C:\ 為當(dāng)前文件夾,如果您指定文件名,則 Windows 將在此文件夾中查找這個(gè)文件。 鍵入 sqlcmd 連接到本地計(jì)算機(jī)上的 SQL Server 默認(rèn)實(shí)例,命令提示符窗口的內(nèi)容為: C:\>sqlcmd 1> _ 這表示您已連接到 SQL Server 的實(shí)例,并且 sqlcmd 現(xiàn)在已可以接受 Transact-SQL 語句和 sqlcmd 命令。1> 后閃爍的下劃線是 sqlcmd 提示符,它標(biāo)明了所鍵入語句和命令的顯示位置?,F(xiàn)在,鍵入 USE AdventureWorks 并按 Enter 鍵,然后鍵入 GO 并按 Enter 鍵。命令提示符窗口的內(nèi)容如下: sqlcmd USE AdventureWorks; GO 下面是結(jié)果集。 Changed database context to 'AdventureWorks'. 1> _ 輸入 USE AdventureWorks 后按 Enter 鍵,即向 sqlcmd 發(fā)出換行信號。鍵入 GO, 后按 Enter 鍵,即向 sqlcmd 發(fā)出信號將 USE AdventureWorks 語句發(fā)送到 SQL Server 的實(shí)例。sqlcmd 隨后返回一條消息,指示 USE 語句已成功完成并顯示新的 1> 提示符作為輸入新語句或命令的信號。 下面的示例說明了鍵入 SELECT 語句和 GO 執(zhí)行 SELECT 以及鍵入 EXIT 退出 sqlcmd 時(shí)命令提示符窗口包含的內(nèi)容: sqlcmd USE AdventureWorks; GO SELECT TOP (5) ContactID, FirstName, LastName FROM Person.Contact; GO 下面是結(jié)果集。 ContactID FirstName LastName ----------- -------------------------------------------------- ----------- 1 Syed Abbas 2 Catherine Abel 3 Kim Abercrombie 4 Humberto Acevedo 5 Pilar Ackerman (5 rows affected) 1> EXIT C:\> 行 3> GO 后的幾行內(nèi)容為 SELECT 語句的輸出。生成輸出后,sqlcmd 重置 sqlcmd 提示符并顯示 1>。在 1> 行輸入 EXIT 后,命令提示符窗口顯示第一次打開時(shí)顯示的行。它指示 sqlcmd 已退出會話?,F(xiàn)在可以再鍵入一個(gè) EXIT 命令關(guān)閉命令提示符窗口。 可以使用 sqlcmd 執(zhí)行數(shù)據(jù)庫腳本文件。腳本文件是一些文本文件,它們同時(shí)包含 Transact-SQL 語句、sqlcmd 命令和腳本變量。有關(guān)如何使用腳本變量的詳細(xì)信息,請參閱將 sqlcmd 與腳本變量結(jié)合使用。sqlcmd 與腳本文件中語句、命令和腳本變量的配合方式類似于它與交互輸入的語句和命令的配合方式。主要區(qū)別在于 sqlcmd 從輸入文件連續(xù)讀取內(nèi)容,而不是等待用戶輸入語句、命令和腳本變量。 可以通過幾種不同的方式創(chuàng)建數(shù)據(jù)庫腳本文件:
A. 使用 sqlcmd 運(yùn)行腳本啟動(dòng)記事本并鍵入以下 Transact-SQL 語句: USE AdventureWorks; GO SELECT TOP (5) ContactID, FirstName, LastName FROM Person.Contact; GO 創(chuàng)建一個(gè)名為 MyFolder 的文件夾,然后將腳本另存為文件夾 C:\MyFolder 中的文件 MyScript.sql。在命令提示符處輸入以下命令運(yùn)行腳本,并將輸出放入 MyFolder 的 MyOutput.txt 中: sqlcmd -i C:\MyFolder\MyScript.sql -o C:\MyFolder\MyOutput.txt 在記事本中查看 MyOutput.txt 的內(nèi)容時(shí),將看到以下內(nèi)容: 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) 連接到一臺具有阻塞問題的服務(wù)器。 C:\>sqlcmd -S ServerName -A 1> SELECT blocked FROM sys.dm_exec_requests WHERE blocked <> 0; 2> GO 下面是結(jié)果集。 spid blocked ------ ------- 62 64 (1 rows affected) 使用 sqlcmd 結(jié)束阻塞進(jìn)程。 1> KILL 64; 2> GO C. 使用 sqlcmd 執(zhí)行存儲過程下面的示例說明如何使用 sqlcmd 執(zhí)行存儲過程。創(chuàng)建以下存儲過程。 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 提示符下,輸入以下內(nèi)容: 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 進(jìn)行數(shù)據(jù)庫維護(hù)下面的示例說明了如何將 sqlcmd 用于數(shù)據(jù)庫維護(hù)任務(wù)。使用以下代碼創(chuàng)建 C:\BackupTemplate.sql。 USE master; BACKUP DATABASE [$(db)] TO DISK='$(bakfile)'; 在 sqlcmd 提示符下,輸入以下內(nèi)容: C:\ >sqlcmd 1> :connect Sqlcmd: Successfully connected to server
|
|