日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

[转帖]Sqlcmd使用详解

發(fā)布時間:2025/3/20 66 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [转帖]Sqlcmd使用详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Sqlcmd使用詳解

2018年09月17日 13:36:39?吥輕誩放棄?閱讀數(shù):3053 版權(quán)聲明:版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。 https://blog.csdn.net/sandy9919/article/details/82735755

Sqlcmd實用工具,可以輸入 TRANSACT-SQL 語句、 系統(tǒng)過程和腳本文件,通過各種可用模式:

  • 通過命令提示符。
  • 在中查詢編輯器在 SQLCMD 模式下。
  • 在 Windows 腳本文件。
  • 在 SQL Server 代理作業(yè)的操作系統(tǒng) (Cmd.exe) 作業(yè)步驟。

該實用工具使用 ODBC 執(zhí)行 TRANSACT-SQL 批處理。

備注

Sqlcmd 實用工具的最新版本可作為 Web 版本從?下載中心獲取。?您需要版本 13.1 或更高版本以支持 Always Encrypted (-g) 和 Azure Active Directory 身份驗證 (-G)。?(你的計算機(jī)上可能已安裝多個版本的 sqlcmd.exe。?請確保使用正確的版本。?若要確定版本,請執(zhí)行?sqlcmd -?。)

預(yù)安裝默認(rèn)情況下,可以嘗試從 Azure Cloud Shell sqlcmd 實用工具:?

若要在 SSMS 中運行 sqlcmd 語句,請從頂部導(dǎo)航欄上的“查詢菜單”下拉列表中選擇“SQLCMD 模式”。

重要

在“查詢編輯器”的常規(guī)模式和 SQLCMD 模式下,?SQL Server Management Studio?(SSMS) 使用 Microsoft?.NET Framework?SqlClient 執(zhí)行操作。?通過命令行運行 sqlcmd 時,sqlcmd 使用 ODBC 驅(qū)動程序。?由于可以應(yīng)用不同的默認(rèn)選項,因此在?SQL Server Management Studio?SQLCMD 模式下以及在?sqlcmd?實用工具中執(zhí)行相同的查詢時,可能會看到不同的行為。

sqlcmd 暫不要求命令行選項和值之間必須有空格。?不過,在今后推出的版本中,可能會要求在命令行選項和值之間必須有空格。

其他主題:

  • 啟動 sqlcmd 實用工具
  • 使用 sqlcmd 實用工具

語法

復(fù)制

  • 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)
  • 命令行選項

    登錄相關(guān)選項
    -A
    使用專用管理員連接 (DAC) 登錄 SQL Server。?此類型連接用于排除服務(wù)器故障。?此連接僅適用于支持 DAC 的服務(wù)器計算機(jī)。?如果 DAC 不可用,sqlcmd 會生成錯誤消息并退出。?有關(guān) DAC 的詳細(xì)信息,請參閱?用于數(shù)據(jù)庫管理員的診斷連接。?-A 選項不支持使用-G 選項。?當(dāng)連接到 SQL 數(shù)據(jù)庫使用-A,您必須是 SQL server 管理員。?DAC 不可用的 Azure Active Directory 管理員。

    -C
    該開關(guān)供客戶端用于將其配置為隱式表示信任服務(wù)器證書且無需驗證。?此選項等同于 ADO.NET 選項?TRUSTSERVERCERTIFICATE = true。

    -d?db_name
    啟動?sqlcmd?時發(fā)出一個?USE?db_name?語句。?此選項設(shè)置?sqlcmd?腳本變量 SQLCMDDBNAME。?此參數(shù)指定初始數(shù)據(jù)庫。?默認(rèn)為您的登錄名的默認(rèn)數(shù)據(jù)庫屬性。?如果數(shù)據(jù)庫不存在,則生成錯誤消息且?sqlcmd退出。

    -l?login_timeout
    指定在你嘗試連接到服務(wù)器時?sqlcmd?登錄 ODBC 驅(qū)動程序的超時時間(以秒為單位)。?此選項設(shè)置?sqlcmd?腳本變量 SQLCMDLOGINTIMEOUT。?登錄到?sqlcmd?的默認(rèn)超時時間為 8 秒。?當(dāng)使用?-G?選項連接到 SQL 數(shù)據(jù)庫或 SQL 數(shù)據(jù)倉庫并使用 Azure Active Directory 進(jìn)行身份驗證時,建議超時值至少為 30 秒。?登錄超時必須是介于 0 和 65534 之間的數(shù)字。?如果提供的值不是數(shù)值或不在此范圍內(nèi),?sqlcmd?將生成錯誤消息。?該值為 0 時,則允許無限制等待。

    -E
    使用信任連接而不是用戶名和密碼登錄 SQL Server。?默認(rèn)情況下,如果未指定?-E?,?sqlcmd?將使用信任連接選項。

    -E?選項會忽略可能的用戶名和密碼環(huán)境變量設(shè)置,例如 SQLCMDPASSWORD。?如果將?-E?選項與?-U?選項或?-P?選項一起使用,將生成錯誤消息。

    -g
    將列加密設(shè)置設(shè)為?Enabled。?有關(guān)詳細(xì)信息,請參閱?Always Encrypted。?僅支持存儲在 Windows 證書存儲中的主密鑰。?-g 開關(guān)至少需要?sqlcmd?版本?13.1。?若要確定你的版本,請執(zhí)行?sqlcmd -?。

    -G
    當(dāng)連接到 SQL 數(shù)據(jù)庫或 SQL 數(shù)據(jù)倉庫時,客戶端將使用此開關(guān)指定該用戶使用 Azure Active Directory 身份驗證來進(jìn)行身份驗證。?此選項設(shè)置?sqlcmd?腳本變量 SQLCMDUSEAAD = true。?-G 開關(guān)至少需要?sqlcmd?版本?13.1。?若要確定你的版本,請執(zhí)行?sqlcmd -?。?有關(guān)詳細(xì)信息,請參閱?使用 Azure Active Directory 身份驗證連接到 SQL 數(shù)據(jù)庫或 SQL 數(shù)據(jù)倉庫。?-A 選項不支持使用-G 選項。

    重要

    -G?選項僅適用于 Azure SQL 數(shù)據(jù)庫 和 Azure 數(shù)據(jù)倉庫。

    • Azure Active Directory 用戶名和密碼:

      當(dāng)你想要使用 Azure Active Directory 用戶名和密碼時,可以提供?-G?選項,也可以通過提供?-U?選項和?-P?選項來使用用戶名和密碼。

      復(fù)制

      Sqlcmd -S testsrv.database.windows.net -d Target_DB_or_DW -U bob@contoso.com -P MyAADPassword -G

      -G 參數(shù)在后端生成以下連接字符串:

      復(fù)制

      SERVER = Target_DB_or_DW.testsrv.database.windows.net;UID= bob@contoso.com;PWD=MyAADPassword;AUTHENTICATION = ActiveDirectoryPassword
    • Azure Active Directory 集成

      要進(jìn)行 Azure Active Directory 集成身份驗證,可提供?-G?選項而無需用戶名或密碼:

      復(fù)制

      Sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G

      這將在后端生成以下連接字符串:

      復(fù)制

      SERVER = Target_DB_or_DW.testsrv.database.windows.net Authentication = ActiveDirectoryIntegrated; Trusted_Connection=NO

      備注

      -E 選項 (Trusted_Connection) 不能與 -G 選項一起使用。

    -H?workstation_name
    工作站的名稱。?此選項設(shè)置?sqlcmd?腳本變量 SQLCMDWORKSTATION。?工作站名稱列出在?sys.sysprocesses?目錄視圖的?hostname?列中,并且可使用存儲過程?sp_who返回。?如果不指定此選項,則默認(rèn)為當(dāng)前計算機(jī)名稱。?此名稱可用來標(biāo)識不同的?sqlcmd?會話。

    -j?將原始錯誤消息輸出到銀幕上。

    -K?application_intent
    連接到服務(wù)器時聲明應(yīng)用程序工作負(fù)荷類型。?目前唯一支持的值是?ReadOnly。?如果未指定?-K?,sqlcmd 實用工具將不支持連接到 AlwaysOn 可用性組中的次要副本。?有關(guān)詳細(xì)信息,請參閱活動次要副本:可讀次要副本(AlwaysOn 可用性組)

    -M?multisubnet_failover
    在連接到 SQL Server 可用性組或 SQL Server 故障轉(zhuǎn)移群集實例的可用性組偵聽程序時,應(yīng)始終指定 -M。-M?將為(當(dāng)前)活動服務(wù)器提供更快的檢測和連接。?如果不指定?–M?,則?-M?處于關(guān)閉狀態(tài)。?有關(guān)詳細(xì)信息 [!包括ssHADR,創(chuàng)建和配置的可用性組的(SQL Server),故障轉(zhuǎn)移群集和 Alwayson 可用性組 (SQL Server),并活動次要副本: 可讀次要副本 (Alwayson 可用性組)。

    -N
    此開關(guān)供客戶端用于請求加密連接。

    -P?password
    用戶指定的密碼。?密碼是區(qū)分大小寫的。?如果使用了 -U 選項而未使用?-P?選項,并且未設(shè)置?SQLCMDPASSWORD?環(huán)境變量,則 sqlcmd 會提示用戶輸入密碼。?我們不建議使用 null 密碼,但您可以通過連續(xù)雙引號一對用于參數(shù)值指定 null 密碼:

    • -P ""

    建議使用強密碼。

    使用強密碼!

    通過向控制臺輸出密碼提示,可以顯示密碼提示,如下所示:?Password:

    隱藏用戶輸入。?也就是說,將不會顯示任何輸入的內(nèi)容,光標(biāo)保留原位不動。

    使用 SQLCMDPASSWORD 環(huán)境變量可以為當(dāng)前會話設(shè)置默認(rèn)密碼。?因此,不必將密碼硬編碼到批處理文件中。

    以下示例首先在命令提示符處設(shè)置 SQLCMDPASSWORD 變量,然后訪問?sqlcmd?實用工具。?在命令提示符下,鍵入:

    SET SQLCMDPASSWORD= p@a$$w0rd
    在以下命令提示符處鍵入:

    sqlcmd

    如果用戶名和密碼組合不正確,將生成錯誤消息。

    注意!?為實現(xiàn)向后兼容性而保留了 OSQLPASSWORD 環(huán)境變量。?SQLCMDPASSWORD 環(huán)境變量優(yōu)先于 OSQLPASSWORD 環(huán)境變量。?現(xiàn)在,不再共享 OSQLPASSWORD,實用程序sqlcmd并osql可以彼此不受干擾地使用。?舊腳本將繼續(xù)使用。

    如果將?-P?選項與?-E?選項一起使用,將生成錯誤消息。

    如果?-P?選項后有多個參數(shù),將生成錯誤消息并退出程序。

    -S?[協(xié)議:]server[\instance_name] [,*?*端口]
    指定要連接的 SQL Server 實例。?它設(shè)置?sqlcmd?腳本變量 SQLCMDSERVER。

    指定 server_name 可連接到該服務(wù)器計算機(jī)上的 SQL Server 默認(rèn)實例。?指定要連接到該服務(wù)器計算機(jī)上 SQL Server 命名實例的 server_name [ \instance_name ]。?如果不指定服務(wù)器,sqlcmd 將連接到本地計算機(jī)上 SQL Server 的默認(rèn)實例。?從網(wǎng)絡(luò)上的遠(yuǎn)程計算機(jī)執(zhí)行?sqlcmd?時,此選項是必需的。

    protocol?可以是?tcp?(TCP/IP)、?lpc?(共享內(nèi)存)或?np?(命名管道)。

    如果在啟動 sqlcmd 時未指定 server_name [ \instance_name ],SQL Server 將檢查并使用 SQLCMDSERVER 環(huán)境變量。

    備注

    為實現(xiàn)向后兼容性而保留了 OSQLSERVER 環(huán)境變量。?SQLCMDSERVER 環(huán)境變量優(yōu)先于 OSQLSERVER 環(huán)境變量;也就是說?sqlcmd?和?osql?可以彼此相鄰使用而不會相互干擾,并且舊式腳本可以繼續(xù)使用。

    -U?login_id
    登錄名或包含的數(shù)據(jù)庫用戶名。?對于包含的數(shù)據(jù)庫用戶,必須提供數(shù)據(jù)庫名稱選項 (-d)。

    備注

    OSQLUSER 環(huán)境變量可用于實現(xiàn)向后兼容性。?SQLCMDUSER 環(huán)境變量優(yōu)先于 OSQLUSER 環(huán)境變量。也就是說,?sqlcmd?和?osql?可以彼此相鄰使用而不會相互干擾。?此外,現(xiàn)有的?osql?腳本可以繼續(xù)使用。

    如果 -U 選項和 -P 選項均未指定,sqlcmd 將嘗試使用 Microsoft Windows 身份驗證模式進(jìn)行連接。?身份驗證基于運行?sqlcmd的用戶的 Windows 帳戶。

    如果?-U?選項與?-E?選項(將在本主題的后面進(jìn)行說明)一起使用,則會生成錯誤消息。?如果?–U?選項后有多個參數(shù),將生成錯誤消息并退出程序。

    -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

    輸入/輸出選項
    -f?codepage?|?i:codepage[,o:codepage] |?o:codepage[,i:* codepage]
    指定輸入和輸出代碼頁。?代碼頁頁碼是指定已安裝的 Windows 代碼頁的數(shù)值。

    代碼頁轉(zhuǎn)換規(guī)則:

    • 如果未指定代碼頁,?sqlcmd?會將當(dāng)前代碼頁同時用于輸入文件和輸出文件,除非輸入文件為 Unicode 文件,在此情況下無需進(jìn)行轉(zhuǎn)換。

    • sqlcmd?自動識別 Big-endian Unicode 和 Little-endian Unicode 輸入文件。?如果已指定?-u?選項,輸出將始終為 Little-endian Unicode。

    • 如果未指定輸出文件,輸出代碼頁將為控制臺代碼頁。?借助此方法,可以在控制臺上正確顯示輸出。

    • 假定多個輸入文件具有相同的代碼頁。?可以將 Unicode 和非 Unicode 輸入文件混合在一起。

      在命令提示符處輸入?chcp?以驗證 Cmd.exe 的代碼頁。

      -i?input_file[,* * * input_file2*...]
      標(biāo)識包含一批 SQL 語句或存儲過程的文件。?可以指定要按順序讀取和處理的多個文件。?文件名之間不要使用任何空格。?sqlcmd?將首先檢查所有指定的文件是否都存在。?如果有一個或多個文件不存在,?sqlcmd?將退出。?-i 和 -Q/-q 選項是互斥的。

      路徑示例:

    復(fù)制

  • -i C:\<filename>
  • -i \\<Server>\<Share$>\<filename>
  • -i "C:\Some Folder\<file name>"
  • 包含空格的文件路徑必須用引號引起來。

    此選項可以多次使用:-iinput_file?-II input_file.

    -o?output_file
    標(biāo)識從?sqlcmd接收輸出的文件。

    如果指定了?-u?,則?output_file?以 Unicode 格式存儲。?如果文件名無效,將生成一個錯誤消息,并且sqlcmd?將退出。?sqlcmd?不支持向同一文件并發(fā)寫入多個?sqlcmd?進(jìn)程。?文件輸出將損壞或不正確。?請參閱?-f開關(guān)也是與文件格式。?如果此文件不存在,將創(chuàng)建此文件。?前一個?sqlcmd?會話中的同名文件將被覆蓋。?此處指定的文件不是?stdout?文件。?如果指定了 stdout 文件,就不會使用此文件。

    路徑示例:

    復(fù)制

  • -o C:< filename>
  • -o \\<Server>\<Share$>\<filename>
  • -o "C:\Some Folder\<file name>"
  • 包含空格的文件路徑必須用引號引起來。

    -r[0?|?1]
    將錯誤消息輸出重定向到屏幕 (stderr)。?如果未指定參數(shù)或指定參數(shù)為?0,則僅重定向嚴(yán)重級別為 11 或更高的錯誤消息。?如果指定參數(shù)為?1,則將重定向所有消息輸出(包括 PRINT)。?如果使用 -o,將不起任何作用。?默認(rèn)情況下,消息將發(fā)送到?stdout。

    -R
    促使 sqlcmd 根據(jù)客戶端的區(qū)域設(shè)置本地化從 SQL Server 中檢索到的數(shù)字、貨幣、日期和時間列。?默認(rèn)情況下,將使用服務(wù)器的區(qū)域設(shè)置顯示這些列。

    -u
    指定無論?input_file?為何種格式,都以 Unicode 格式存儲?output_file。

    查詢執(zhí)行選項
    -e
    將輸入腳本寫入標(biāo)準(zhǔn)輸出設(shè)備 (stdout)。

    -I
    將 SET QUOTED_IDENTIFIER 連接選項設(shè)置為 ON。?默認(rèn)情況下,此選項設(shè)置為 OFF。?有關(guān)詳細(xì)信息,請參閱?SET QUOTED_IDENTIFIER (Transact-SQL)。

    -q"?cmdline query?"
    啟動?sqlcmd?時執(zhí)行查詢,但是在查詢結(jié)束運行時不退出?sqlcmd?。?可以執(zhí)行多個以分號分隔的查詢。?將查詢用引號引起來,如下例所示。

    在命令提示符下,鍵入:

    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;"

    重要

    請不要在查詢中使用 GO 終止符。

    如果在指定此選項的同時還指定了?-b?,?sqlcmd?在遇到錯誤時將退出。?-b?將在本主題后面部分進(jìn)行介紹。

    -Q"?cmdline query?"
    在?sqlcmd?啟動時執(zhí)行查詢,隨后立即退出?sqlcmd。?可以執(zhí)行多個以分號分隔的查詢。

    將查詢用引號引起來,如下例所示。

    在命令提示符下,鍵入:

    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;"

    重要

    請不要在查詢中使用 GO 終止符。

    如果在指定此選項的同時還指定了?-b?,?sqlcmd?在遇到錯誤時將退出。?-b?將在本主題后面部分進(jìn)行介紹。

    -t?query_timeout
    指定命令(或 SQL 語句)超時的時間。此選項設(shè)置?sqlcmd?腳本變量 SQLCMDSTATTIMEOUT。?如果未指定?time_out?值,則命令將不會超時。querytime_out 必須是介于 1 和 65534 之間的數(shù)字。?如果提供的值不是數(shù)值或不在此范圍內(nèi),?sqlcmd?將生成錯誤消息。

    備注

    實際的超時值可能會與指定的 time_out 值相差幾秒。

    -vvar =?value[?var =?value...]
    創(chuàng)建可在?sqlcmd腳本中使用的?sqlcmd?腳本變量。?如果該值包含空格,則將其用引號引起來。?可以指定多個 var="values" 值*。?如果指定的任何值中有錯誤,?sqlcmd?會生成錯誤消息,然后退出。

    sqlcmd -v MyVar1=something MyVar2="some thing"

    sqlcmd -v MyVar1=something -v MyVar2="some thing"

    -x
    導(dǎo)致?sqlcmd?忽略腳本變量。?如果腳本中包含多個 INSERT 語句,且這些語句可能包含格式與常規(guī)變量(如 $(variable_name))相同的字符串,就會發(fā)現(xiàn)此參數(shù)很有用。

    格式設(shè)置選項
    -h?headers
    指定要在列標(biāo)題之間輸出的行數(shù)。?默認(rèn)為每一組查詢結(jié)果輸出一次標(biāo)題。?此選項設(shè)置?sqlcmd?腳本變量 SQLCMDHEADERS。?使用?-1?指定不可輸出標(biāo)題。?任何無效的值都將導(dǎo)致?sqlcmd?生成錯誤消息并隨后退出。

    -k?[1?|?2]
    刪除輸出中的所有控制字符,例如制表符和換行符。?此參數(shù)在返回數(shù)據(jù)時保留列格式。?如果指定了 1,則控制字符被一個空格替代。?如果指定了 2,則連續(xù)的控制字符被一個空格替代。?-k?與?-k1相同。

    -s?col_separator
    指定列分隔符字符。?默認(rèn)為空格。?此選項設(shè)置?sqlcmd?腳本變量 SQLCMDCOLSEP。?若要使用對操作系統(tǒng)有特殊含義的字符,如“與”符號 (&) 或分號 (;),請將該字符用雙引號 (") 引起來。?列分隔符可以是任意 8 位字符。

    -w?column_width
    指定用于輸出的屏幕寬度。?此選項設(shè)置?sqlcmd?腳本變量 SQLCMDCOLWIDTH。?該列寬必須是介于 8 和 65536 之間的數(shù)字。?如果指定的列寬不在此范圍內(nèi),sqlcmd 就會生成錯誤消息。?默認(rèn)寬度為 80 個字符。在輸出行超出指定的列寬時,將轉(zhuǎn)到下一行。

    -W
    此選項刪除列的尾隨空格。?在準(zhǔn)備要導(dǎo)出到另一應(yīng)用程序的數(shù)據(jù)時,請將此選項和?-s?選項一起使用。?不能與?-y?或?-Y?選項一起使用。

    -y?variable_length_type_display_width
    設(shè)置?sqlcmd?腳本變量?SQLCMDMAXVARTYPEWIDTH。?默認(rèn)值為 256。?它限制為下列大型可變長度數(shù)據(jù)類型返回的字符的數(shù)目:

    • varchar(max)

    • nvarchar(max)

    • varbinary(max)

    • xml

    • UDT(用戶定義數(shù)據(jù)類型)

    • text

    • ntext

    • 圖像

    備注

    根據(jù)實現(xiàn),UDT 可以使用固定的長度。?如果此固定長度 UDT 的長度比?display_width短,則返回的 UDT 值將不受影響。?但是,如果此長度比?display_width長,則輸出會被截斷。

    重要

    使用?-y 0?選項時要特別注意,因為根據(jù)返回的數(shù)據(jù)量大小,此選項可能導(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

    • 變量

      錯誤報告選項
      -b
      指定發(fā)生錯誤時,?sqlcmd?退出并返回一個 DOS ERRORLEVEL 值。?當(dāng) SQL Server 錯誤消息的嚴(yán)重級別高于 10 時,返回給 DOS ERRORLEVEL 變量的值為 1;否則返回的值為 0。?如果除?-b?選項外還設(shè)置了?-V選項,則當(dāng)嚴(yán)重級別低于使用?-V?設(shè)置的值時,?sqlcmd將不報告錯誤。?命令提示符批處理文件可以測試 ERRORLEVEL 的值并相應(yīng)處理錯誤。?sqlcmd?不對嚴(yán)重級別 10 報告錯誤(信息性消息)。

      如果?sqlcmd?腳本包含錯誤的注釋、語法錯誤或缺少腳本變量,則返回的 ERRORLEVEL 為 1。

      -m?error_level
      控制發(fā)送到?stdout的錯誤消息類型。?將發(fā)送嚴(yán)重級別大于或等于此級別的消息。?如果此值設(shè)置為?-1,將發(fā)送所有消息(包括信息性消息)。?-m?和?-1之間不允許有空格。?例如,?-m-1?有效,而?-m-1?無效。

      此選項還設(shè)置?sqlcmd?腳本變量 SQLCMDERRORLEVEL。?此變量的默認(rèn)值為 0。

      -b?error_severity_level
      控制用于設(shè)置 ERRORLEVEL 變量的嚴(yán)重級別。?嚴(yán)重級別大于或等于此值的錯誤消息將設(shè)置 ERRORLEVEL。?小于 0 的值將報告為 0。?可以使用批處理文件和 CMD 文件來測試 ERRORLEVEL 變量的值。

      其他選項
      -a?packet_size
      需要不同大小的數(shù)據(jù)包。?此選項設(shè)置?sqlcmd?腳本變量 SQLCMDPACKETSIZE。?packet_size?必須是介于 512 和 32767 之間的值。?默認(rèn)值為 4096。?如果腳本的兩個 GO 命令之間包含大量 SQL 語句,則使用較大的數(shù)據(jù)包可以提高腳本執(zhí)行的性能。?您可以請求更大的包大小。?但是,如果請求遭拒絕,?sqlcmd?將對包大小使用服務(wù)器默認(rèn)值。

      -c?batch_terminator
      指定批處理終止符。?默認(rèn)情況下,通過單獨在一行中鍵入“GO”來終止命令并將其發(fā)送到 SQL Server。?重置批處理終止符時,不要使用對操作系統(tǒng)具有特殊意義的 Transact-SQL 保留關(guān)鍵字或字符,即便它們前面有反斜杠也是如此。

      -L[c]
      列出本地配置的服務(wù)器計算機(jī)和在網(wǎng)絡(luò)上播發(fā)的服務(wù)器計算機(jī)的名稱。?此參數(shù)不能與其他參數(shù)結(jié)合使用。?可以列出的服務(wù)器的最大數(shù)目是 3000。?如果服務(wù)器列表由于緩沖區(qū)大小而被截斷,則會顯示錯誤消息。

    備注

    鑒于網(wǎng)絡(luò)廣播的特點,?sqlcmd?不可能及時接收來自所有服務(wù)器的響應(yīng)。?因此,每次調(diào)用該選項所返回的服務(wù)器列表都可能不同。

    如果指定了可選參數(shù) c,輸出就不會包含 Servers: 標(biāo)題行,且列出的每個服務(wù)器行都沒有前導(dǎo)空格。?此演示文稿稱為清除輸出。?清除輸出可以提高腳本語言的處理性能。

    -p[1]
    輸出每個結(jié)果集的性能統(tǒng)計信息。?下面的輸出顯示示例展示了性能統(tǒng)計信息的格式:

    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ù)的總時間。

    t2?= 單個事務(wù)的平均時間。

    t3?= 每秒平均事務(wù)數(shù)。

    所有時間均以毫秒表示。

    如果指定了可選參數(shù)?1?,則統(tǒng)計信息的輸出格式為以冒號分隔的格式,此格式可以由腳本輕松導(dǎo)入到電子表格中或進(jìn)行處理。

    如果可選參數(shù)是除?1之外的任何值,則將生成錯誤并且?sqlcmd?將退出。

    -X[1]
    從批處理文件執(zhí)行?sqlcmd?時,將禁用可能危及系統(tǒng)安全的命令。?禁用的命令仍然可以被識別;?sqlcmd發(fā)出警告消息并繼續(xù)。?如果指定了可選參數(shù)?1?,則?sqlcmd?將生成錯誤消息,然后退出。?使用?-X?選項時,將禁用以下命令:

    • ED

    • !!?command

      如果指定?-X?選項,則會阻止將環(huán)境變量傳遞給?sqlcmd。?同時該選項還會阻止執(zhí)行通過使用 SQLCMDINI 腳本變量指定的啟動腳本。?有關(guān)?sqlcmd?腳本變量的詳細(xì)信息,請參閱?將 sqlcmd 與腳本變量結(jié)合使用。

      -?
      顯示?sqlcmd?的版本和?sqlcmd?選項的語法摘要。

    Remarks

    不必按語法部分所示的順序使用選項。

    在返回多個結(jié)果時,?sqlcmd?在批處理中的每個結(jié)果集之間輸出一個空行。?此外,如果沒有應(yīng)用于已執(zhí)行的語句,則不會出現(xiàn)?<x> rows affected?消息。

    若要交互使用?sqlcmd?,請在命令提示符處帶本主題前面介紹的一個或多個選項鍵入?sqlcmd?。?有關(guān)詳細(xì)信息,請參閱?使用 sqlcmd 實用工具

    備注

    選項?-L、?-Q、?-Z?或?-i?會導(dǎo)致?sqlcmd?在執(zhí)行后退出。

    命令環(huán)境 (Cmd.exe) 中的 sqlcmd 命令行的總長度(包括所有參數(shù)和擴(kuò)展變量)取決于 Cmd.exe 所在的操作系統(tǒng)。

    變量優(yōu)先級(從低到高)

  • 系統(tǒng)級環(huán)境變量。

  • 用戶級環(huán)境變量

  • 運行sqlcmd?之前在命令提示符處設(shè)置的命令 shell (?SETX=Y)。

  • sqlcmd-v?X=Y

  • :Setvar?X Y

  • 備注

    若要查看環(huán)境變量,請在“控制面板” 中打開“系統(tǒng)” ,然后單擊“高級” 選項卡。

    sqlcmd 腳本變量

    變量相關(guān)開關(guān)R/W,則“默認(rèn)”
    SQLCMDUSER-UR""
    SQLCMDPASSWORD-P--""
    SQLCMDSERVER-SR"DefaultLocalInstance"
    SQLCMDWORKSTATION-HR"ComputerName"
    SQLCMDDBNAME-dR""
    SQLCMDLOGINTIMEOUT-lR/W"8"(秒)
    SQLCMDSTATTIMEOUT-tR/W"0" = 無限期等待
    SQLCMDHEADERS-HR/W"0"
    SQLCMDCOLSEP-SR/W“ ”
    SQLCMDCOLWIDTH-wR/W"0"
    SQLCMDPACKETSIZE-AR"4096"
    SQLCMDERRORLEVEL-MR/W0
    SQLCMDMAXVARTYPEWIDTH-yR/W"256"
    SQLCMDMAXFIXEDTYPEWIDTH-yR/W"0" = 無限制
    SQLCMDEDITOR?R/W"edit.com"
    SQLCMDINI?R""
    SQLCMDUSEAAD-GR/W""

    使用?:Connect?時設(shè)置 SQLCMDUSER、SQLCMDPASSWORD 和 SQLCMDSERVER。

    R 表示在程序初始化過程中只能設(shè)置一次值。

    R/W 表示可以使用?setvar?命令修改值,并且后續(xù)命令將受新值的影響。

    sqlcmd 命令

    除 sqlcmd 中的 Transact-SQL 語句之外,還可使用以下命令:

    ??
    GO?[count]:List
    [:]?RESET:Error
    [:]?ED:Out
    [:]?!!:Perftrace
    [:]?QUIT:Connect
    [:]?EXIT:On Error
    :r:Help
    :ServerList:XML?[ON?|?OFF]
    :Setvar:Listvar

    使用?sqlcmd?命令時,請注意以下事項:

    • 除 GO 以外,所有?sqlcmd?命令必須以冒號 (:) 為前綴。

      重要

      為了保持現(xiàn)有?osql?腳本的向后兼容性,有些命令會被視為不帶冒號。?這由 [:] 指示。

    • sqlcmd?命令只有出現(xiàn)在一行的開頭時,才能夠被識別。

    • 所有?sqlcmd?命令都不區(qū)分大小寫。

    • 每個命令都必須位于單獨的行中。?命令后面不能跟隨 Transact-SQL 語句或其他命令。

    • 命令將被立即執(zhí)行。?它們與 Transact-SQL 語句不同,不會放在執(zhí)行緩沖區(qū)中。

      編輯命令
      [:]?ED
      啟動文本編輯器。?該編輯器可以用來編輯當(dāng)前的 Transact-SQL 批處理或上次執(zhí)行的批處理。?若要編輯上次執(zhí)行的批處理,必須在上一批處理執(zhí)行完之后立即鍵入?ED?命令。

      文本編輯器由 SQLCMDEDITOR 環(huán)境變量定義。?默認(rèn)編輯器為“Edit”。?若要更改編輯器,請設(shè)置 SQLCMDEDITOR 環(huán)境變量。?例如,要將編輯器設(shè)置為 Microsoft 記事本,請在命令提示符處鍵入:

      SET SQLCMDEDITOR=notepad

      [:]?RESET
      清除語句緩存。

      :List
      輸出語句緩存的內(nèi)容。

      變量
      : Setvar?<?var> [?"值"?]
      定義?sqlcmd?腳本變量。?腳本變量具有如下格式:?$(VARNAME)。

      變量名稱不區(qū)分大小寫。

      可以通過下列方式設(shè)置腳本變量:

    • 隱式使用命令行選項。?例如,?-l?選項可設(shè)置 SQLCMDLOGINTIMEOUT?sqlcmd?變量。

    • 顯式使用?:Setvar?命令。

    • 在運行?sqlcmd之前定義一個環(huán)境變量。

    備注

    -X?選項可阻止將環(huán)境變量傳遞給?sqlcmd。

    如果使用?:Setvar?定義的變量和某個環(huán)境變量同名,則使用?:Setvar?定義的變量優(yōu)先。

    變量名中不能包含空格字符。

    變量名不能與變量表達(dá)式(如 $(var))具有相同的形式。

    如果腳本變量的字符串值中含有空格,請用引號將該值引起來。?如果未指定腳本變量的值,則將刪除該腳本變量。

    :Listvar
    顯示當(dāng)前設(shè)置的腳本變量列表。

    備注

    只顯示由?sqlcmd設(shè)置的腳本變量和使用?:Setvar?命令設(shè)置的腳本變量。

    輸出命令
    :Error?
    <?filename?>|?STDERR|STDOUT
    將所有錯誤輸出重定向到?file name指定的文件、?stderr?或?stdout。?Error?命令可以在一個腳本中多次出現(xiàn)。?默認(rèn)情況下,錯誤輸出將發(fā)送到?stderr。

    file name
    創(chuàng)建并打開一個要接收輸出的文件。?若該文件已經(jīng)存在,則將其截斷為零字節(jié)。?若該文件不可用(由于權(quán)限或其他原因),將不會切換輸出,也不會將輸出發(fā)送到上次指定的目標(biāo)或默認(rèn)目標(biāo)。

    STDERR
    將錯誤輸出切換到?stderr?流。?如果已經(jīng)重定向,流的重定向目標(biāo)將會收到錯誤輸出。

    STDOUT
    將錯誤輸出切換到?stdout?流。?如果已經(jīng)重定向,流的重定向目標(biāo)將會收到錯誤輸出。

    :Out <?filename?>|?STDERR|?STDOUT
    創(chuàng)建所有查詢結(jié)果并將它們重定向到?file name指定的文件、?stderr?或?stdout。?默認(rèn)情況下,輸出將發(fā)送到?stdout。?若該文件已經(jīng)存在,則將其截斷為零字節(jié)。?Out?命令可以在一個腳本中多次出現(xiàn)。

    :Perftrace <?filename?>|?STDERR|?STDOUT
    創(chuàng)建所有性能跟蹤信息并將它們重定向到?file name指定的文件、?stderr?或?stdout。?默認(rèn)情況下,性能跟蹤輸出將發(fā)送到?stdout。?若該文件已經(jīng)存在,則將其截斷為零字節(jié)。?Perftrace?命令可以在一個腳本中多次出現(xiàn)。

    執(zhí)行控制命令
    :On Error[?exit?|?ignore]
    設(shè)置在腳本或批處理執(zhí)行過程中發(fā)生錯誤時要執(zhí)行的操作。

    使用?exit?選項時,?sqlcmd?退出,并顯示相應(yīng)的錯誤值。

    使用?ignore?選項時,?sqlcmd?會忽略錯誤,并繼續(xù)執(zhí)行批處理或腳本。?默認(rèn)情況下,會輸出錯誤消息。

    [:]?QUIT
    導(dǎo)致?sqlcmd?退出。

    [:]?EXIT[?(statement)?]
    允許將 SELECT 語句的結(jié)果用作?sqlcmd的返回值。?如果為數(shù)值,最后一個結(jié)果行的第一列將轉(zhuǎn)換為 4 字節(jié)的整數(shù)(長整型)。?MS-DOS 將低字節(jié)傳遞給父進(jìn)程或操作系統(tǒng)錯誤級別。?Windows 200x 傳遞整個 4 字節(jié)整數(shù)。?語法為:

    :EXIT(query)

    例如:

    :EXIT(SELECT @@ROWCOUNT)

    您還可以在批處理文件中包含?EXIT?參數(shù)。?例如,在命令提示符處鍵入:

    sqlcmd -Q "EXIT(SELECT COUNT(*) FROM '%1')"

    使用?sqlcmd?實用工具將圓括號?()?中的所有內(nèi)容發(fā)送給服務(wù)器。?如果系統(tǒng)存儲過程選擇了一個集合并返回一個值,則僅返回選擇的內(nèi)容。?如果圓括號中沒有任何內(nèi)容,則 EXIT?()?語句會執(zhí)行批處理中此語句前的所有內(nèi)容,然后退出,且不返回任何值。

    當(dāng)指定了不正確的查詢時,?sqlcmd?將退出,且不返回任何值。

    下面是 EXIT 格式的列表:

    • :EXIT

      不執(zhí)行批處理就立即退出,無返回值。

    • :EXIT( )

      執(zhí)行批處理后退出,不返回值。

    • :EXIT(query)

      執(zhí)行包括查詢的批處理,返回查詢的結(jié)果后退出。

      如果在?sqlcmd?腳本中使用 RAISERROR,并且出現(xiàn)狀態(tài) 127,則?sqlcmd?將退出,并將消息 ID 返回給客戶端。?例如:

      RAISERROR(50001, 10, 127)

      該錯誤會導(dǎo)致?sqlcmd?腳本終止并將消息 ID 50001 返回給客戶端。

      SQL Server 保留了介于 -1 到 -99 之間的返回值;sqlcmd 定義了以下附加返回值:

    返回值描述
    -100選擇返回值前遇到錯誤。
    -101選擇返回值時找不到行。
    -102選擇返回值時發(fā)生轉(zhuǎn)換錯誤。

    GO?[count]
    GO 在批處理結(jié)束和任何緩存 Transact-SQL 語句執(zhí)行時發(fā)出信號。?不同批次多次執(zhí)行批處理。?不能在單個批處理中多次聲明變量。

    其他命令
    :r <?filename?>
    將來自 <filename> 指定的文件中的其他 Transact-SQL 語句和 sqlcmd 命令分析到語句緩存中*。

    如果文件包含的 Transact-SQL 語句后面沒有跟隨?GO,則必須在?:r?的后一行中輸入?GO。

    備注

    系統(tǒng)會相對于?sqlcmd?在其中運行的啟動目錄讀取?<?filename?>。

    當(dāng)遇到批處理終止符之后,將讀取并執(zhí)行該文件。?可以發(fā)出多個?:r?命令。?該文件可以包含任何?sqlcmd?命令,?包括批處理終止符?GO。

    備注

    每遇到一個?:r?命令,交互模式下顯示的行計數(shù)都會加一。?:r?命令會出現(xiàn)在 list 命令的輸出中。

    :Serverlist
    列出在本地配置的服務(wù)器和在網(wǎng)絡(luò)上廣播的服務(wù)器的名稱。

    :Connect?server_name[\instance_name] [-l?timeout] [-U?user_name?[-P?password]]
    連接到 SQL Server 的一個實例。?同時關(guān)閉當(dāng)前的連接。

    超時選項:

    ??
    0永遠(yuǎn)等待
    n>0等待 n 秒鐘

    SQLCMDSERVER 腳本變量將反映當(dāng)前的活動連接。

    如果未指定?timeout?,則其默認(rèn)值將為 SQLCMDLOGINTIMEOUT 變量的值。

    僅當(dāng)指定了?user_name?(作為選項或環(huán)境變量)時,才會提示用戶輸入密碼。?如果已設(shè)置 SQLCMDUSER 或 SQLCMDPASSWORD 環(huán)境變量,則不會出現(xiàn)此提示。?如果既未提供選項,又未提供環(huán)境變量,便會使用 Windows 身份驗證模式進(jìn)行登錄。?例如,若要使用集成安全性連接到 SQL Server 的一個實例?instance1(如?myserver),則會使用以下內(nèi)容:

    :connect myserver\instance1

    若要使用腳本變量連接到?myserver?的默認(rèn)實例,您會使用以下內(nèi)容:

    :setvar myusername test

    :setvar myservername myserver

    :connect $(myservername) $(myusername)

    [:]?!!<?command>
    執(zhí)行操作系統(tǒng)命令。?若要執(zhí)行操作系統(tǒng)命令,請用兩個感嘆號 (!!) 開始一行,后面輸入操作系統(tǒng)命令。?例如:

    :!! Dir

    備注

    該命令在運行?sqlcmd?的計算機(jī)上執(zhí)行。

    :XML?[ON?|?OFF]
    有關(guān)詳細(xì)信息,請參閱本主題中的?XML 輸出格式?和?JSON 輸出格式

    :Help
    列出?sqlcmd?命令以及每個命令的簡短說明。

    sqlcmd 文件名

    可以使用sqlcmd?選項或?sqlcmd?命令指定?sqlcmd?輸入文件。?可以使用?-o?選項或?:Error、?:Out?和?:Perftrace?命令指定輸出文件。?以下是使用這些文件的一些原則:

    • :Error、:Out 和 :Perftrace 應(yīng)使用不同的 <filename>*。?如果使用了相同的 <filename>,這些命令的輸入可能會混雜在一起*。

    • 如果從本地計算機(jī)的?sqlcmd?調(diào)用遠(yuǎn)程服務(wù)器上的輸入文件,并且該文件包含驅(qū)動器文件路徑(如 :out c:\OutputFile.txt),?將在本地計算機(jī)而不是遠(yuǎn)程服務(wù)器上創(chuàng)建輸出文件。

    • 有效文件路徑包括:?C:\<filename>、?\\<Server>\<Share$>\<filename>?和?"C:\Some Folder\<file name>"。?如果路徑中包含空格,請使用引號。

    • 每個新的?sqlcmd?會話都將覆蓋現(xiàn)有的同名文件。

    信息性消息

    sqlcmd 打印輸出服務(wù)器發(fā)送的所有信息性消息。?在以下示例中,執(zhí)行 Transact-SQL 語句后會輸出信息性消息。

    在命令提示符下鍵入以下內(nèi)容:

    sqlcmd

    在 sqlcmd 提示符下鍵入:

    USE AdventureWorks2012;

    GO

    按下 Enter 時,會輸出以下信息性消息:“已將數(shù)據(jù)庫上下文改為 'AdventureWorks2012'。”

    Transact-SQL 查詢的輸出格式

    sqlcmd?首先輸出列標(biāo)題,其中包含在選擇列表中指定的列名。?列名使用 SQLCMDCOLSEP 字符分隔。?默認(rèn)情況下,將使用空格。?如果列名短于列寬,則使用空格填充輸出,直到下一列。

    此行將跟隨一行分隔行,分隔行是一系列的破折號字符。?以下輸出顯示了一個示例。

    啟動?sqlcmd。?在?sqlcmd?命令提示符下鍵入以下命令:

    USE AdventureWorks2012;

    SELECT TOP (2) BusinessEntityID, FirstName, LastName

    FROM Person.Person;

    GO

    按下 Enter 時,會返回以下結(jié)果集。

    BusinessEntityID FirstName LastName

    ---------------- ------------ ----------

    285 Syed Abbas

    293 Catherine Abel

    (2 row(s) affected)

    雖然?BusinessEntityID?列只有 4 個字符寬,但已將其擴(kuò)展以適應(yīng)更長的列名。?默認(rèn)情況下,輸出會在 80 個字符處終止。?可通過使用?-w?選項或設(shè)置 SQLCMDCOLWIDTH 腳本變量來進(jìn)行更改。

    XML 輸出格式

    從 FOR XML 子句得到的 XML 輸出是在連續(xù)流中的未格式化的輸出。

    若要得到 XML 輸出,請使用以下命令:?:XML ON。

    備注

    sqlcmd?將采用常見的格式返回錯誤消息。?請注意,XML 文本流中的錯誤消息還將采用 XML 格式輸出。?如果使用?:XML ON,則?sqlcmd?不顯示信息性消息。

    若要關(guān)閉 XML 模式,請使用以下命令:?:XML OFF。

    發(fā)出 XML OFF 命令之前不應(yīng)顯示 GO 命令,因為 XML OFF 命令會將?sqlcmd?切換回面向行的輸出。

    XML(流形式)數(shù)據(jù)和行集數(shù)據(jù)不能混合。?如果在執(zhí)行輸出 XML 流的 Transact-SQL 語句之前未發(fā)出 XML ON 命令,則輸出將為亂碼。?如果已發(fā)出 XML ON 指令,則無法執(zhí)行輸出常規(guī)行集的 Transact-SQL 語句。

    備注

    :XML?命令不支持 SET STATISTICS XML 語句。

    JSON 輸出格式

    若要得到 JSON 輸出,請使用以下命令:?:XML ON。?否則,輸出包括的列名和 JSON 文本。?此輸出不是有效的 JSON。

    若要關(guān)閉 XML 模式,請使用以下命令:?:XML OFF。

    有關(guān)詳細(xì)信息,請參閱本主題中的?XML 輸出格式?。

    使用 Azure Active Directory 身份驗證

    使用 Azure Active Directory 身份驗證的示例:

    復(fù)制

  • sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -l 30
  • sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -U bob@contoso.com -P MyAADPassword -G -l 30
  • sqlcmd 最佳方法

    使用以下方法來幫助實現(xiàn)最高的安全性和效率。

    • 使用集成安全性。

    • 在自動化環(huán)境中使用?-X?。

    • 使用適當(dāng)?shù)?NTFS 文件系統(tǒng)權(quán)限保護(hù)輸入文件和輸出文件。

    • 若要提高性能,請在一個?sqlcmd?會話中執(zhí)行盡可能多的操作,而不是在一系列會話中來執(zhí)行這些操作。

    • 將批處理或查詢執(zhí)行的超時值設(shè)置為大于您所預(yù)期的值。

    轉(zhuǎn)載于:https://www.cnblogs.com/jinanxiaolaohu/p/10728767.html

    總結(jié)

    以上是生活随笔為你收集整理的[转帖]Sqlcmd使用详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。