在導(dǎo)入sql大文件數(shù)據(jù)的時(shí)候 SQL Server Management Studio 工具會(huì)有OOM的問題,用 sqlcmd 是個(gè)不錯(cuò)的選擇。
下載最新版本的 sqlcmd 實(shí)用工具
下載 Microsoft Command Line Utilities 15.0.x for SQL Server (x64) (2.6 MB)
下載 Microsoft Command Line Utilities 15.0.x for SQL Server (x86) (2.3 MB)
SQLCMD 的新版本支持 Azure AD 身份驗(yàn)證,包括對(duì) SQL 數(shù)據(jù)庫(kù)、 SQL 數(shù)據(jù)倉(cāng)庫(kù)和始終加密功能的多重身份驗(yàn)證 (MFA) 支持。 新的 BCP 支持 Azure AD 身份驗(yàn)證,包括多重身份驗(yàn)證 (MFA) 支持用于 SQL 數(shù)據(jù)庫(kù)和 SQL 數(shù)據(jù)倉(cāng)庫(kù)。
系統(tǒng)要求Windows 10、 Windows 7、 Windows 8、 Windows 8.1、 Windows Server 2008、 Windows Server 2008 R2、 Windows Server 2008 R2 SP1、 Windows Server 2012 中,Windows Server 2012 R2 此組件要求Windows 安裝程序4.5并SQL Server 的 Microsoft ODBC 驅(qū)動(dòng)程序 17.3.1.1。
若要檢查的 SQLCMD 版本執(zhí)行sqlcmd -?命令并確認(rèn)該 15.0.1300.359 版本或更高版本中使用。
sqlcmd 暫不要求在命令行選項(xiàng)和值之間使用空格。 不過,在今后推出的版本中,可能會(huì)要求在命令行選項(xiàng)和值之間必須有空格。
其他主題:
語(yǔ)法
sqlcmd
-a packet_size
-A (dedicated administrator connection)
-b (terminate batch job if there is an error)
-c batch_terminator
-C (trust the server certificate)
-d db_name
-e (echo input)
-E (use trusted connection)
-f codepage | i:codepage[,o:codepage] | o:codepage[,i:codepage]
-g (enable column encryption)
-G (use Azure Active Directory for authentication)
-h rows_per_header
-H workstation_name
-i input_file
-I (enable quoted identifiers)
-j (Print raw error messages)
-k[1 | 2] (remove or replace control characters)
-K application_intent
-l login_timeout
-L[c] (list servers, optional clean output)
-m error_level
-M multisubnet_failover
-N (encrypt connection)
-o output_file
-p[1] (print statistics, optional colon format)
-P password
-q "cmdline query"
-Q "cmdline query" (and exit)
-r[0 | 1] (msgs to stderr)
-R (use client regional settings)
-s col_separator
-S [protocol:]server[instance_name][,port]
-t query_timeout
-u (unicode output file)
-U login_id
-v var = "value"
-V error_severity_level
-w column_width
-W (remove trailing spaces)
-x (disable variable substitution)
-X[1] (disable commands, startup script, environment variables, optional exit)
-y variable_length_type_display_width
-Y fixed_length_type_display_width
-z new_password
-Z new_password (and exit)
-? (usage)
命令行選項(xiàng)
登錄相關(guān)選項(xiàng)
-A
使用專用管理員連接 (DAC) 登錄 SQL Server。 此類型連接用于排除服務(wù)器故障。 此連接僅適用于支持 DAC 的服務(wù)器計(jì)算機(jī)。 如果 DAC 不可用,sqlcmd 會(huì)生成錯(cuò)誤消息并退出。 有關(guān) DAC 的詳細(xì)信息,請(qǐng)參閱 用于數(shù)據(jù)庫(kù)管理員的診斷連接。 -A 選項(xiàng)不支持使用-G 選項(xiàng)。 當(dāng)連接到 SQL 數(shù)據(jù)庫(kù)使用-A,您必須是 SQL server 管理員。 DAC 不可用于 Azure Active Directory 管理員。
-C
該開關(guān)供客戶端用于將其配置為隱式表示信任服務(wù)器證書且無需驗(yàn)證。 此選項(xiàng)等同于 ADO.NET 選項(xiàng) TRUSTSERVERCERTIFICATE = true。
-d db_name
啟動(dòng) sqlcmd 時(shí)發(fā)出一個(gè) USE db_name 語(yǔ)句。 此選項(xiàng)設(shè)置 sqlcmd 腳本變量 SQLCMDDBNAME。 此參數(shù)指定初始數(shù)據(jù)庫(kù)。默認(rèn)為您的登錄名的默認(rèn)數(shù)據(jù)庫(kù)屬性。 如果數(shù)據(jù)庫(kù)不存在,則生成錯(cuò)誤消息且 sqlcmd 退出。
-l login_timeout
指定在你嘗試連接到服務(wù)器時(shí) sqlcmd 登錄 ODBC 驅(qū)動(dòng)程序的超時(shí)時(shí)間(以秒為單位)。 此選項(xiàng)設(shè)置 sqlcmd 腳本變量 SQLCMDLOGINTIMEOUT。 登錄到 sqlcmd 的默認(rèn)超時(shí)時(shí)間為 8 秒。 當(dāng)使用 -G 選項(xiàng)連接到 SQL 數(shù)據(jù)庫(kù)或 SQL 數(shù)據(jù)倉(cāng)庫(kù)并使用 Azure Active Directory 進(jìn)行身份驗(yàn)證時(shí),建議超時(shí)值至少為 30 秒。 登錄超時(shí)必須是介于 0 和 65534 之間的數(shù)字。 如果提供的值不是數(shù)值或不在此范圍內(nèi), sqlcmd 將生成錯(cuò)誤消息。 該值為 0 時(shí),則允許無限制等待。
-E
使用信任連接而不是用戶名和密碼登錄 SQL Server。 默認(rèn)情況下,如果未指定 -E , sqlcmd 將使用信任連接選項(xiàng)。
-E 選項(xiàng)會(huì)忽略可能的用戶名和密碼環(huán)境變量設(shè)置,例如 SQLCMDPASSWORD。 如果將 -E 選項(xiàng)與 -U 選項(xiàng)或 -P 選項(xiàng)一起使用,將生成錯(cuò)誤消息。
-g
將列加密設(shè)置設(shè)為 Enabled。 有關(guān)詳細(xì)信息,請(qǐng)參閱 Always Encrypted。 僅支持存儲(chǔ)在 Windows 證書存儲(chǔ)中的主密鑰。 -g 開關(guān)至少需要 sqlcmd 版本 13.1。 若要確定你的版本,請(qǐng)執(zhí)行 sqlcmd -?。
-G
當(dāng)連接到 SQL 數(shù)據(jù)庫(kù)或 SQL 數(shù)據(jù)倉(cāng)庫(kù)時(shí),客戶端將使用此開關(guān)指定該用戶使用 Azure Active Directory 身份驗(yàn)證來進(jìn)行身份驗(yàn)證。 此選項(xiàng)設(shè)置 sqlcmd 腳本變量 SQLCMDUSEAAD = true。 -G 開關(guān)至少需要 sqlcmd 版本 13.1。 若要確定你的版本,請(qǐng)執(zhí)行 sqlcmd -?。 有關(guān)詳細(xì)信息,請(qǐng)參閱 使用 Azure Active Directory 身份驗(yàn)證連接到 SQL 數(shù)據(jù)庫(kù)或 SQL 數(shù)據(jù)倉(cāng)庫(kù)。 -A 選項(xiàng)不支持使用-G 選項(xiàng)。
-H workstation_name
工作站的名稱。 此選項(xiàng)設(shè)置 sqlcmd 腳本變量 SQLCMDWORKSTATION。 工作站名稱列出在 sys.sysprocesses 目錄視圖的hostname 列中,并且可使用存儲(chǔ)過程 sp_who返回。 如果不指定此選項(xiàng),則默認(rèn)為當(dāng)前計(jì)算機(jī)名稱。 此名稱可用來標(biāo)識(shí)不同的 sqlcmd 會(huì)話。
-j 將原始錯(cuò)誤消息輸出到銀幕上。
-K application_intent
連接到服務(wù)器時(shí)聲明應(yīng)用程序工作負(fù)荷類型。 目前唯一支持的值是 ReadOnly。 如果未指定 -K ,sqlcmd 實(shí)用工具將不支持連接到 AlwaysOn 可用性組中的次要副本。 有關(guān)詳細(xì)信息,請(qǐng)參閱活動(dòng)次要副本:可讀次要副本(AlwaysOn 可用性組)
-M multisubnet_failover
在連接到 SQL Server 可用性組或 SQL Server 故障轉(zhuǎn)移群集實(shí)例的可用性組偵聽程序時(shí),應(yīng)始終指定 -M。 -M 將為(當(dāng)前)活動(dòng)服務(wù)器提供更快的檢測(cè)和連接。 如果 -M 未指定,-M 處于關(guān)閉狀態(tài)。 有關(guān)詳細(xì)信息,請(qǐng)參閱偵聽程序、客戶端連接、應(yīng)用程序故障轉(zhuǎn)移、創(chuàng)建和配置可用性組 (SQL Server)、故障轉(zhuǎn)移群集和 AlwaysOn 可用性組 (SQL Server) 和活動(dòng)次要副本:可讀次要副本(AlwaysOn 可用性組)。
-N
此開關(guān)供客戶端用于請(qǐng)求加密連接。
-P password
用戶指定的密碼。 密碼是區(qū)分大小寫的。 如果使用了 -U 選項(xiàng)而未使用 -P 選項(xiàng),并且未設(shè)置 SQLCMDPASSWORD 環(huán)境變量,則 sqlcmd 會(huì)提示用戶輸入密碼。 我們不建議使用 null 密碼,但您可以通過連續(xù)雙引號(hào)一對(duì)用于參數(shù)值指定 null 密碼:
- -P ""
建議使用強(qiáng)密碼。
使用強(qiáng)密碼!
通過向控制臺(tái)輸出密碼提示,可以顯示密碼提示,如下所示: Password:
隱藏用戶輸入。 也就是說,將不會(huì)顯示任何輸入的內(nèi)容,光標(biāo)保留原位不動(dòng)。
使用 SQLCMDPASSWORD 環(huán)境變量可以為當(dāng)前會(huì)話設(shè)置默認(rèn)密碼。 因此,不必將密碼硬編碼到批處理文件中。
以下示例首先在命令提示符處設(shè)置 SQLCMDPASSWORD 變量,然后訪問 sqlcmd 實(shí)用工具。 在命令提示符下,鍵入:
SET SQLCMDPASSWORD= p@a$$w0rd
在以下命令提示符處鍵入:
sqlcmd
如果用戶名和密碼組合不正確,將生成錯(cuò)誤消息。
注意! 為實(shí)現(xiàn)向后兼容性而保留了 OSQLPASSWORD 環(huán)境變量。 SQLCMDPASSWORD 環(huán)境變量?jī)?yōu)先于 OSQLPASSWORD 環(huán)境變量。 現(xiàn)在,不再共享 OSQLPASSWORD,實(shí)用程序sqlcmd并osql可以彼此不受干擾地使用。 舊腳本將繼續(xù)使用。
如果將 -P 選項(xiàng)與 -E 選項(xiàng)一起使用,將生成錯(cuò)誤消息。
如果 -P 選項(xiàng)后有多個(gè)參數(shù),將生成錯(cuò)誤消息并退出程序。
-S [protocol:]server[*instance_name][,*port]
指定要連接的 SQL Server 實(shí)例。 它設(shè)置 sqlcmd 腳本變量 SQLCMDSERVER。
指定 server_name 可連接到該服務(wù)器計(jì)算機(jī)上的 SQL Server 默認(rèn)實(shí)例。 指定要連接到該服務(wù)器計(jì)算機(jī)上 SQL Server 命名實(shí)例的 server_name [ *instance_name* ]。 如果不指定服務(wù)器,sqlcmd 將連接到本地計(jì)算機(jī)上 SQL Server 的默認(rèn)實(shí)例。 從網(wǎng)絡(luò)上的遠(yuǎn)程計(jì)算機(jī)執(zhí)行 sqlcmd 時(shí),此選項(xiàng)是必需的。
protocol 可以是 tcp (TCP/IP)、 lpc (共享內(nèi)存)或 np (命名管道)。
如果在啟動(dòng) sqlcmd 時(shí)未指定 server_name [ *instance_name* ],SQL Server 將檢查并使用 SQLCMDSERVER 環(huán)境變量。
備注
為實(shí)現(xiàn)向后兼容性而保留了 OSQLSERVER 環(huán)境變量。 SQLCMDSERVER 環(huán)境變量?jī)?yōu)先于 OSQLSERVER 環(huán)境變量;也就是說 sqlcmd 和 osql 可以彼此相鄰使用而不會(huì)相互干擾,并且舊式腳本可以繼續(xù)使用。
-U login_id
登錄名或包含的數(shù)據(jù)庫(kù)用戶名。 對(duì)于包含的數(shù)據(jù)庫(kù)用戶,必須提供數(shù)據(jù)庫(kù)名稱選項(xiàng) (-d)。
備注
OSQLUSER 環(huán)境變量可用于實(shí)現(xiàn)向后兼容性。 SQLCMDUSER 環(huán)境變量?jī)?yōu)先于 OSQLUSER 環(huán)境變量。 也就是說,sqlcmd 和 osql 可以彼此相鄰使用而不會(huì)相互干擾。 此外,現(xiàn)有的 osql 腳本可以繼續(xù)使用。
如果 -U 選項(xiàng)和 -P 選項(xiàng)均未指定,sqlcmd 會(huì)嘗試使用 Microsoft Windows 身份驗(yàn)證模式進(jìn)行連接。 身份驗(yàn)證基于運(yùn)行 sqlcmd的用戶的 Windows 帳戶。
如果 -U 選項(xiàng)與 -E 選項(xiàng)(將在本主題的后面進(jìn)行說明)一起使用,則會(huì)生成錯(cuò)誤消息。 如果 -U 選項(xiàng)后跟多個(gè)參數(shù),便會(huì)生成錯(cuò)誤消息并退出程序。
-z new_password
更改密碼:
sqlcmd -U someuser -P s0mep@ssword -z a_new_p@a$$w0rd
-Z new_password
更改密碼并退出:
sqlcmd -U someuser -P s0mep@ssword -Z a_new_p@a$$w0rd
輸入/輸出選項(xiàng)
-f codepage | i:codepage[,o:codepage] | o:codepage[,i:codepage]
指定輸入和輸出代碼頁(yè)。 代碼頁(yè)頁(yè)碼是指定已安裝的 Windows 代碼頁(yè)的數(shù)值。
代碼頁(yè)轉(zhuǎn)換規(guī)則:
如果未指定代碼頁(yè), sqlcmd 會(huì)將當(dāng)前代碼頁(yè)同時(shí)用于輸入文件和輸出文件,除非輸入文件為 Unicode 文件,在此情況下無需進(jìn)行轉(zhuǎn)換。
sqlcmd 自動(dòng)識(shí)別 Big-endian Unicode 和 Little-endian Unicode 輸入文件。 如果已指定 -u 選項(xiàng),輸出將始終為 Little-endian Unicode。
如果未指定輸出文件,輸出代碼頁(yè)將為控制臺(tái)代碼頁(yè)。 借助此方法,可以在控制臺(tái)上正確顯示輸出。
假定多個(gè)輸入文件具有相同的代碼頁(yè)。 可以將 Unicode 和非 Unicode 輸入文件混合在一起。
在命令提示符處輸入 chcp 以驗(yàn)證 Cmd.exe 的代碼頁(yè)。
-i input_file[,input_file2...]
標(biāo)識(shí)包含一批 SQL 語(yǔ)句或存儲(chǔ)過程的文件。 可以指定要按順序讀取和處理的多個(gè)文件。 文件名之間不要使用任何空格。sqlcmd 將首先檢查所有指定的文件是否都存在。 如果有一個(gè)或多個(gè)文件不存在, sqlcmd 將退出。 -i 和 -Q/-q 選項(xiàng)是互斥的。
路徑示例:
復(fù)制
-i C:\<filename>
-i \\<Server>\<Share$>\<filename>
-i "C:\Some Folder\<file name>"
包含空格的文件路徑必須用引號(hào)引起來。
此選項(xiàng)可以使用多次:-i_input_file_ -I_I input_file。_
-o output_file
標(biāo)識(shí)從 sqlcmd接收輸出的文件。
如果指定了 -u ,則 output_file 以 Unicode 格式存儲(chǔ)。 如果文件名無效,將生成一個(gè)錯(cuò)誤消息,并且 sqlcmd 將退出。sqlcmd 不支持向同一文件并發(fā)寫入多個(gè) sqlcmd 進(jìn)程。 文件輸出將損壞或不正確。 請(qǐng)參閱 -f開關(guān)也是與文件格式。 如果此文件不存在,將創(chuàng)建此文件。 前一個(gè) sqlcmd 會(huì)話中的同名文件將被覆蓋。 此處指定的文件不是 stdout 文件。 如果指定了 stdout 文件,就不會(huì)使用此文件。
路徑示例:
復(fù)制
-o C:< filename>
-o \\<Server>\<Share$>\<filename>
-o "C:\Some Folder\<file name>"
包含空格的文件路徑必須用引號(hào)引起來。
-r[0 | 1]
將錯(cuò)誤消息輸出重定向到屏幕 (stderr)。 如果未指定參數(shù)或指定參數(shù)為 0,則僅重定向嚴(yán)重級(jí)別為 11 或更高的錯(cuò)誤消息。 如果指定參數(shù)為 1,則將重定向所有消息輸出(包括 PRINT)。 如果使用 -o,將不起任何作用。 默認(rèn)情況下,消息將發(fā)送到 stdout。
-R
讓 sqlcmd 根據(jù)客戶端的區(qū)域設(shè)置,本地化從 SQL Server 中檢索到的數(shù)字、貨幣、日期和時(shí)間列。 默認(rèn)情況下,這些列使用服務(wù)器的區(qū)域設(shè)置進(jìn)行顯示。
-u
指定無論 input_file 為何種格式,都以 Unicode 格式存儲(chǔ) output_file。
查詢執(zhí)行選項(xiàng)
-e
將輸入腳本寫入標(biāo)準(zhǔn)輸出設(shè)備 (stdout)。
-I
將 SET QUOTED_IDENTIFIER 連接選項(xiàng)設(shè)置為 ON。 默認(rèn)情況下,此選項(xiàng)設(shè)置為 OFF。 有關(guān)詳細(xì)信息,請(qǐng)參閱 SET QUOTED_IDENTIFIER (Transact-SQL)。
-q " cmdline query "
啟動(dòng) sqlcmd 時(shí)執(zhí)行查詢,但是在查詢結(jié)束運(yùn)行時(shí)不退出 sqlcmd 。 可以執(zhí)行多個(gè)以分號(hào)分隔的查詢。 將查詢用引號(hào)引起來,如下例所示。
在命令提示符下,鍵入:
sqlcmd -d AdventureWorks2012 -q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2012 -q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
重要
請(qǐng)不要在查詢中使用 GO 終止符。
如果在指定此選項(xiàng)的同時(shí)還指定了 -b , sqlcmd 在遇到錯(cuò)誤時(shí)將退出。 -b 將在本文后面部分進(jìn)行介紹。
-Q " cmdline query "
在 sqlcmd 啟動(dòng)時(shí)執(zhí)行查詢,隨后立即退出 sqlcmd。 可以執(zhí)行多個(gè)以分號(hào)分隔的查詢。
將查詢用引號(hào)引起來,如下例所示。
在命令提示符下,鍵入:
sqlcmd -d AdventureWorks2012 -Q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2012 -Q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
重要
請(qǐng)不要在查詢中使用 GO 終止符。
如果在指定此選項(xiàng)的同時(shí)還指定了 -b , sqlcmd 在遇到錯(cuò)誤時(shí)將退出。 -b 將在本文后面部分進(jìn)行介紹。
-t query_timeout
指定命令(或 SQL 語(yǔ)句)超時(shí)的時(shí)間。此選項(xiàng)設(shè)置 sqlcmd 腳本變量 SQLCMDSTATTIMEOUT。 如果未指定 time_out 值,則命令將不會(huì)超時(shí)。querytime_out 必須是介于 1 和 65534 之間的數(shù)字。 如果提供的值不是數(shù)值或不在此范圍內(nèi), sqlcmd 將生成錯(cuò)誤消息。
備注
實(shí)際的超時(shí)值可能會(huì)與指定的 time_out 值相差幾秒。
-vvar = value[ var = value...]
創(chuàng)建可在 sqlcmd腳本中使用的 sqlcmd 腳本變量。 如果該值包含空格,則將其用引號(hào)引起來。 可以指定多個(gè) var="values"值。 如果指定的任何值中有錯(cuò)誤, sqlcmd 會(huì)生成錯(cuò)誤消息,然后退出。
sqlcmd -v MyVar1=something MyVar2="some thing"
sqlcmd -v MyVar1=something -v MyVar2="some thing"
-x
導(dǎo)致 sqlcmd 忽略腳本變量。 如果腳本中包含多個(gè) INSERT 語(yǔ)句,且這些語(yǔ)句可能包含格式與常規(guī)變量(如 $(variable_name))相同的字符串,就會(huì)發(fā)現(xiàn)此參數(shù)很有用。
格式設(shè)置選項(xiàng)
-h headers
指定要在列標(biāo)題之間輸出的行數(shù)。 默認(rèn)為每一組查詢結(jié)果輸出一次標(biāo)題。 此選項(xiàng)設(shè)置 sqlcmd 腳本變量 SQLCMDHEADERS。使用 -1 指定不要打印的標(biāo)題。 任何無效的值都將導(dǎo)致 sqlcmd 生成錯(cuò)誤消息并隨后退出。
-k [1 | 2]
刪除輸出中的所有控制字符,例如制表符和換行符。 此參數(shù)在返回?cái)?shù)據(jù)時(shí)保留列格式。 如果指定了 1,則控制字符被一個(gè)空格替代。 如果指定了 2,則連續(xù)的控制字符被一個(gè)空格替代。 -k 與 -k1相同。
-s col_separator
指定列分隔符字符。 默認(rèn)為空格。 此選項(xiàng)設(shè)置 sqlcmd 腳本變量 SQLCMDCOLSEP。 若要使用對(duì)操作系統(tǒng)有特殊含義的字符,如“與”符號(hào) (&) 或分號(hào) (;),請(qǐng)將該字符用雙引號(hào) (") 引起來。 列分隔符可以是任意 8 位字符。
-w column_width
指定用于輸出的屏幕寬度。 此選項(xiàng)設(shè)置 sqlcmd 腳本變量 SQLCMDCOLWIDTH。 該列寬必須是介于 8 和 65536 之間的數(shù)字。如果指定的列寬不在此范圍內(nèi),sqlcmd 就會(huì)生成錯(cuò)誤消息。 默認(rèn)寬度為 80 個(gè)字符。 在輸出行超出指定的列寬時(shí),將轉(zhuǎn)到下一行。
-W
此選項(xiàng)刪除列的尾隨空格。 在準(zhǔn)備要導(dǎo)出到另一應(yīng)用程序的數(shù)據(jù)時(shí),請(qǐng)將此選項(xiàng)和 -s 選項(xiàng)一起使用。 不能與 -y 或 -Y 選項(xiàng)一起使用。
-y variable_length_type_display_width
設(shè)置 sqlcmd 腳本變量 SQLCMDMAXVARTYPEWIDTH。 默認(rèn)值為 256。 它限制為下列大型可變長(zhǎng)度數(shù)據(jù)類型返回的字符的數(shù)目:
varchar(max)
nvarchar(max)
varbinary(max)
xml
UDT(用戶定義數(shù)據(jù)類型)
text
ntext
圖像
備注
根據(jù)實(shí)現(xiàn),UDT 可以使用固定的長(zhǎng)度。 如果此固定長(zhǎng)度 UDT 的長(zhǎng)度比 display_width短,則返回的 UDT 值將不受影響。但是,如果此長(zhǎng)度比 display_width長(zhǎng),則輸出會(huì)被截?cái)唷?/p>
重要
使用 -y 0 選項(xiàng)時(shí)要特別注意,因?yàn)楦鶕?jù)返回的數(shù)據(jù)量大小,此選項(xiàng)可能導(dǎo)致服務(wù)器和網(wǎng)絡(luò)上出現(xiàn)嚴(yán)重性能問題。
-Y fixed_length_type_display_width
設(shè)置 sqlcmd 腳本變量 SQLCMDMAXFIXEDTYPEWIDTH。 默認(rèn)值為 0(無限制)。 它限制為以下數(shù)據(jù)類型返回的字符數(shù):
char( n ),其中 1<=n<=8000
nchar(n n ),其中 1<=n<=4000
varchar(n n ),其中 1<=n<=8000
nvarchar(n n ),其中 1<=n<=4000
varbinary(n n ),其中 1<=n<=4000
變量
錯(cuò)誤報(bào)告選項(xiàng)
-b
指定發(fā)生錯(cuò)誤時(shí), sqlcmd 退出并返回一個(gè) DOS ERRORLEVEL 值。 當(dāng) SQL Server 錯(cuò)誤消息的嚴(yán)重級(jí)別高于 10 時(shí),返回給 DOS ERRORLEVEL 變量的值為 1;否則返回的值為 0。 如果除 -b 選項(xiàng)外還設(shè)置了 -V選項(xiàng),則當(dāng)嚴(yán)重級(jí)別低于使用 -V 設(shè)置的值時(shí), sqlcmd將不報(bào)告錯(cuò)誤。 命令提示符批處理文件可以測(cè)試 ERRORLEVEL 的值并相應(yīng)處理錯(cuò)誤。 sqlcmd 不對(duì)嚴(yán)重級(jí)別 10 報(bào)告錯(cuò)誤(信息性消息)。
如果 sqlcmd 腳本包含錯(cuò)誤的注釋、語(yǔ)法錯(cuò)誤或缺少腳本變量,則返回的 ERRORLEVEL 為 1。
-m error_level
控制發(fā)送到 stdout的錯(cuò)誤消息類型。 將發(fā)送嚴(yán)重級(jí)別大于或等于此級(jí)別的消息。 如果此值設(shè)置為 -1,將發(fā)送所有消息(包括信息性消息)。 -m 和 -1之間不允許有空格。 例如, -m-1 有效,而 -m-1 無效。
此選項(xiàng)還設(shè)置 sqlcmd 腳本變量 SQLCMDERRORLEVEL。 此變量的默認(rèn)值為 0。
-V error_severity_level
控制用于設(shè)置 ERRORLEVEL 變量的嚴(yán)重級(jí)別。 嚴(yán)重級(jí)別大于或等于此值的錯(cuò)誤消息將設(shè)置 ERRORLEVEL。 小于 0 的值將報(bào)告為 0。 可以使用批處理文件和 CMD 文件來測(cè)試 ERRORLEVEL 變量的值。
其他選項(xiàng)
-a packet_size
需要不同大小的數(shù)據(jù)包。 此選項(xiàng)設(shè)置 sqlcmd 腳本變量 SQLCMDPACKETSIZE。 packet_size 必須是介于 512 和 32767 之間的值。 默認(rèn)值為 4096。 如果腳本的兩個(gè) GO 命令之間包含大量 SQL 語(yǔ)句,則使用較大的數(shù)據(jù)包可以提高腳本執(zhí)行的性能。 您可以請(qǐng)求更大的包大小。 但是,如果請(qǐng)求遭拒絕, sqlcmd 將對(duì)包大小使用服務(wù)器默認(rèn)值。
-c batch_terminator
指定批處理終止符。 默認(rèn)情況下,通過單獨(dú)在一行中鍵入“GO”來終止命令并將其發(fā)送到 SQL Server。 重置批處理終止符時(shí),不要使用對(duì)操作系統(tǒng)具有特殊意義的 Transact-SQL 保留關(guān)鍵字或字符,即便它們前面有反斜杠也是如此。
-L[c]
列出本地配置的服務(wù)器計(jì)算機(jī)和在網(wǎng)絡(luò)上播發(fā)的服務(wù)器計(jì)算機(jī)的名稱。 此參數(shù)不能與其他參數(shù)結(jié)合使用。 可以列出的服務(wù)器的最大數(shù)目是 3000。 如果服務(wù)器列表由于緩沖區(qū)大小而被截?cái)?,則會(huì)顯示錯(cuò)誤消息。
備注
鑒于網(wǎng)絡(luò)廣播的特點(diǎn), sqlcmd 不可能及時(shí)接收來自所有服務(wù)器的響應(yīng)。 因此,每次調(diào)用該選項(xiàng)所返回的服務(wù)器列表都可能不同。
如果指定了可選參數(shù) c,輸出就不會(huì)包含 Servers: 標(biāo)題行,且列出的每個(gè)服務(wù)器行都沒有前導(dǎo)空格。 此演示文稿稱為清除輸出。 清除輸出可以提高腳本語(yǔ)言的處理性能。
-p[1]
輸出每個(gè)結(jié)果集的性能統(tǒng)計(jì)信息。 下面的輸出顯示示例展示了性能統(tǒng)計(jì)信息的格式:
Network packet size (bytes): n
x xact[s]:
Clock Time (ms.): total t1 avg t2 (t3 xacts per sec.)
其中:
x = SQL Server 處理的事務(wù)數(shù)。
t1 = 所有事務(wù)的總時(shí)間。
t2 = 單個(gè)事務(wù)的平均時(shí)間。
t3 = 每秒平均事務(wù)數(shù)。
所有時(shí)間均以毫秒表示。
如果指定了可選參數(shù) 1 ,則統(tǒng)計(jì)信息的輸出格式為以冒號(hào)分隔的格式,此格式可以由腳本輕松導(dǎo)入到電子表格中或進(jìn)行處理。
如果可選參數(shù)是除 1之外的任何值,則將生成錯(cuò)誤并且 sqlcmd 將退出。
-X[1]
從批處理文件執(zhí)行 sqlcmd 時(shí),將禁用可能危及系統(tǒng)安全的命令。 禁用的命令仍然可以被識(shí)別; sqlcmd 發(fā)出警告消息并繼續(xù)。 如果指定了可選參數(shù) 1 ,則 sqlcmd 將生成錯(cuò)誤消息,然后退出。 使用 -X 選項(xiàng)時(shí),將禁用以下命令:
ED
!! command
如果指定 -X 選項(xiàng),則會(huì)阻止將環(huán)境變量傳遞給 sqlcmd。 同時(shí)該選項(xiàng)還會(huì)阻止執(zhí)行通過使用 SQLCMDINI 腳本變量指定的啟動(dòng)腳本。 有關(guān) sqlcmd 腳本變量的詳細(xì)信息,請(qǐng)參閱 將 sqlcmd 與腳本變量結(jié)合使用。
-?
顯示 sqlcmd 的版本和 sqlcmd 選項(xiàng)的語(yǔ)法摘要。
Remarks
不必按語(yǔ)法部分所示的順序使用選項(xiàng)。
在返回多個(gè)結(jié)果時(shí), sqlcmd 在批處理中的每個(gè)結(jié)果集之間輸出一個(gè)空行。 此外,如果沒有應(yīng)用于已執(zhí)行的語(yǔ)句,則不會(huì)出現(xiàn) <x> rows affected 消息。
若要交互使用 sqlcmd,請(qǐng)?jiān)诿钐崾痉幨褂帽疚那懊娼榻B的一個(gè)或多個(gè)選項(xiàng)鍵入 sqlcmd。 有關(guān)詳細(xì)信息,請(qǐng)參閱 使用 sqlcmd 實(shí)用工具
備注
選項(xiàng) -L、 -Q、 -Z 或 -i 會(huì)導(dǎo)致 sqlcmd 在執(zhí)行后退出。
命令環(huán)境 (Cmd.exe) 中的 sqlcmd 命令行的總長(zhǎng)度(包括所有參數(shù)和擴(kuò)展變量)取決于 Cmd.exe 所在的操作系統(tǒng)。
變量?jī)?yōu)先級(jí)(從低到高)
系統(tǒng)級(jí)環(huán)境變量。
用戶級(jí)環(huán)境變量
運(yùn)行sqlcmd 之前在命令提示符處設(shè)置的命令 shell ( SETX=Y)。
sqlcmd-v X=Y
:Setvar X Y
備注
若要查看環(huán)境變量,請(qǐng)?jiān)凇翱刂泼姘濉?中打開“系統(tǒng)” ,然后單擊“高級(jí)” 選項(xiàng)卡。