osql 实用工具
http://msdn.microsoft.com/zh-cn/library/ms162806.aspx
osql 實(shí)用工具
其他版本- SQL Server 2008 R2
- SQL Server 2008
- SQL Server 2005
使用 osql 實(shí)用工具,可以輸入 Transact-SQL?語句、系統(tǒng)過程和腳本文件。 此實(shí)用工具通過 ODBC 與服務(wù)器通信。
| 在 SQL Server 的未來版本中將刪除此功能。 請避免在新的開發(fā)工作中使用此功能,并計劃修改當(dāng)前使用此功能的應(yīng)用程序。 請改用 sqlcmd。 有關(guān)詳細(xì)信息,請參閱 sqlcmd 實(shí)用工具。 |
復(fù)制 osql [-?] | [-L] | [{{-Ulogin_id [-Ppassword]} | –E }[-Sserver_name[\instance_name]] [-Hwksta_name] [-ddb_name][-ltime_out] [-ttime_out] [-hheaders][-scol_separator] [-wcolumn_width] [-apacket_size][-e] [-I] [-D data_source_name][-ccmd_end] [-q "query"] [-Q"query"][-n] [-merror_level] [-r {0 | 1}][-iinput_file] [-ooutput_file] [-p][-b] [-u] [-R] [-O] ] 參數(shù)
-?
顯示 osql 開關(guān)的語法摘要。
列出在本地配置的服務(wù)器和在網(wǎng)絡(luò)上廣播的服務(wù)器的名稱。
| 鑒于網(wǎng)絡(luò)上廣播的特點(diǎn),osql 可能不會及時接收來自所有服務(wù)器的響應(yīng)。 因此,每次調(diào)用該選項(xiàng)所返回的服務(wù)器列表都可能不同。 |
用戶登錄 ID。 登錄 ID 區(qū)分大小寫。
用戶指定的密碼。 如果未使用 -P 選項(xiàng),osql 將提示輸入密碼。 如果在命令提示符的末尾使用 -P 選項(xiàng)而不提供密碼,osql 將使用默認(rèn)密碼 (NULL)。
| 不要使用空密碼。 請使用強(qiáng)密碼。 有關(guān)詳細(xì)信息,請參閱強(qiáng)密碼。 |
密碼是區(qū)分大小寫的。
使用 OSQLPASSWORD 環(huán)境變量,可以為當(dāng)前會話設(shè)置默認(rèn)密碼。 因此,不需要通過硬編碼在批處理文件中設(shè)置密碼。
如果不使用 -P 選項(xiàng)指定密碼,osql 將首先檢查 OSQLPASSWORD 變量。 如果未設(shè)置任何值,則 osql 將使用默認(rèn)密碼 (NULL)。 以下示例將在命令提示符中設(shè)置 OSQLPASSWORD 變量,然后訪問 osql 實(shí)用工具:
復(fù)制 C:\>SET OSQLPASSWORD=abracadabra C:\>osql| 若要屏蔽密碼,請不要同時指定 -P 和 -U 選項(xiàng)。 相反,應(yīng)在指定 osql 和 -U 選項(xiàng)和其他開關(guān)(不指定 -P)之后,按 Enter 鍵,此時 osql 將提示您輸入密碼。 這種方法可以確保輸入密碼時對其屏蔽。 |
使用可信連接而不請求密碼。
指定要連接到的 SQL Server 實(shí)例。 指定 server_name 將連接到該服務(wù)器上的 SQL Server 默認(rèn)實(shí)例。 指定 server_name\instance_name 將連接到該服務(wù)器中的 SQL Server 的命名實(shí)例。 如果未指定服務(wù)器,osql 將連接到本地計算機(jī)上的 SQL Server 默認(rèn)實(shí)例。 從網(wǎng)絡(luò)上的遠(yuǎn)程計算機(jī)執(zhí)行 osql 時,此選項(xiàng)是必需的。
工作站的名稱。 工作站名稱存儲在 sysprocesses.hostname 中,并按 sp_who 顯示。 如果不指定此選項(xiàng),則采用當(dāng)前計算機(jī)名稱。
啟動 osql時發(fā)出一個 USE db_name 語句。
指定 osql 登錄超時之前的秒數(shù)。 登錄到 osql 的默認(rèn)超時時間為 8 秒。
指定命令超時之前的秒數(shù)。 如果未指定 time_out 值,則命令將不會超時。
指定要在列標(biāo)題之間打印的行數(shù)。 默認(rèn)為每一組查詢結(jié)果打印一次標(biāo)題。 使用 -1 可指定不打印標(biāo)題。 如果使用 -1,則在參數(shù)和設(shè)置之間一定不能有空格(可以是 -h-1,不能是 -h -1)。
指定列分隔符字符,默認(rèn)值為空格。 若要使用對操作系統(tǒng)有特殊含義的字符(例如 | ; & < >),請將該字符用雙引號 (") 括起來。
允許用戶設(shè)置屏幕輸出的寬度。 默認(rèn)為 80 個字符。 當(dāng)輸出行達(dá)到其最大屏幕寬度時,會拆分為多行。
允許您請求不同大小的數(shù)據(jù)包。 packet_size 的有效值介于 512 和 65535 之間。 默認(rèn)值 osql 是服務(wù)器默認(rèn)值。 執(zhí)行較大的腳本時,各個 GO 命令之間的 SQL 語句的數(shù)量是龐大的,因此增大數(shù)據(jù)包可以提高性能。 Microsoft 的測試表明大容量復(fù)制操作的最快設(shè)置通常為 8192。 可以請求更大的數(shù)據(jù)包,但如果請求不能得到批準(zhǔn),則 osql 會將此值默認(rèn)為服務(wù)器的默認(rèn)值。
回顯輸入。
將 QUOTED_IDENTIFIER 連接選項(xiàng)設(shè)置為開啟。
連接到某個通過用于 SQL Server 的 ODBC 驅(qū)動程序定義的 ODBC 數(shù)據(jù)源。 osql 連接使用該數(shù)據(jù)源中指定的選項(xiàng)。
| 此選項(xiàng)不適用于為其他驅(qū)動程序定義的數(shù)據(jù)源。 |
指定命令終止符。 默認(rèn)情況下,可以在行中輸入一個單獨(dú)的 GO 來終止命令,并將該命令發(fā)送到 SQL Server。 如果要重置命令終止符,請勿使用對操作系統(tǒng)有特殊含義的 Transact-SQL 保留字或字符,無論其前面是否有反斜杠。
啟動 osql 時執(zhí)行查詢,但在查詢完成時不退出 osql。 (注意查詢語句不應(yīng)包含 GO)。 如果從批處理文件中發(fā)出查詢,請使用 %variables 或環(huán)境 %variables%。 例如:
復(fù)制 SET table=sys.objects osql -E -q "select name, object_id from %table%"將查詢用雙引號括起來,將查詢中嵌入的任何內(nèi)容用單引號括起來。
執(zhí)行查詢并立即退出 osql。 將查詢用雙引號括起來,將查詢中嵌入的任何內(nèi)容用單引號括起來。
從輸入行中刪除編號和提示符號 (>)。
自定義錯誤消息的顯示。 顯示指定的或更高嚴(yán)重級別的錯誤的消息數(shù)、狀態(tài)和錯誤級別。 不顯示低于指定級別的錯誤的信息。 使用 -1 可以指定返回所有標(biāo)題及其消息,即使是信息型消息。 如果使用 -1,則在參數(shù)和設(shè)置之間不能有空格(可以是 -m-1,不能是 -m?-1)。
將消息輸出重定向到屏幕 (stderr)。 如果不指定參數(shù),或指定參數(shù)為 0,則僅重定向嚴(yán)重級別為 11 或更高的錯誤信息。 如果指定參數(shù)為 1,則將重定向所有消息輸出(包括“print”)。
標(biāo)識包含一批 SQL 語句或存儲過程的文件。 小于 (<) 比較運(yùn)算符可以代替 -i 使用。
標(biāo)識從 osql 接收輸出的文件。 大于 (>) 比較運(yùn)算符可以代替 -o 使用。
如果 input_file 不是 Unicode 并且未指定 -u,則以 OEM 格式存儲 output_file。 如果 input_file 是 Unicode 或者指定了 -u,則以 Unicode 格式存儲 output_file。
打印性能統(tǒng)計信息。
指定發(fā)生錯誤時,osql 退出并返回一個 DOS ERRORLEVEL 值。 當(dāng) SQL Server 錯誤消息的嚴(yán)重級別為 11 或更大值時,返回給 DOS ERRORLEVE 變量的值為 1;否則返回的值為 0。 Microsoft MS-DOS 批處理文件可以測試 DOS ERRORLEVEL 的值并正確地處理錯誤。
指定無論 input_file 為何種格式,output_file 都以 Unicode 格式進(jìn)行存儲。
指定在將貨幣、日期和時間數(shù)據(jù)轉(zhuǎn)換為字符數(shù)據(jù)時,SQL Server ODBC 驅(qū)動程序使用客戶端設(shè)置。
指定停用某些 osql 功能以便與 isql 的早期版本的行為匹配。 下列功能停用:
-
EOF 批處理
-
自動調(diào)整控制臺寬度
-
寬消息
同時還將 DOS ERRORLEVEL 的默認(rèn)值設(shè)置為 -1。
| osql 不再支持 -n、-O 和 -D 選項(xiàng)。 |
osql 實(shí)用工具從操作系統(tǒng)直接啟動,并且使用本文中列出的區(qū)分大小寫的選項(xiàng)。 osql啟動后將接受 SQL 語句,然后以交互方式將這些語句發(fā)送到 SQL Server。 結(jié)果被格式化并在屏幕 (stdout) 上顯示。 可使用 QUIT 或 EXIT 退出 osql。
如果啟動 osql 時不指定用戶名,則 SQL Server 將檢查并使用環(huán)境變量,如 osqluser=(user) 或 osqlserver=(server)。 如果未設(shè)置環(huán)境變量,則使用工作站用戶名。 如果未指定服務(wù)器,則使用工作站名稱。
如果 -U 和 -P 選項(xiàng)都沒有使用,則 SQL Server 將嘗試使用 Microsoft Windows 身份驗(yàn)證模式進(jìn)行連接。 身份驗(yàn)證根據(jù)運(yùn)行 osql 的用戶的 Microsoft Windows 帳戶進(jìn)行。
osql 實(shí)用工具使用 ODBC API。 對于 SQL Server ISO 連接選項(xiàng),該實(shí)用工具使用 SQL Server ODBC 驅(qū)動程序的默認(rèn)設(shè)置。 有關(guān)詳細(xì)信息,請參閱“ANSI 選項(xiàng)的效果”。
| osql 實(shí)用工具不支持 CLR 用戶定義數(shù)據(jù)類型。 若要處理這些數(shù)據(jù)類型,必須使用 sqlcmd 實(shí)用工具。 有關(guān)詳細(xì)信息,請參閱 sqlcmd 實(shí)用工具。 |
OSQL 命令
除了 osql 中的 Transact-SQL 語句外,還可以使用以下命令。
| GO | 執(zhí)行上一個 GO 命令之后輸入的所有語句。 |
| RESET | 清除已輸入的所有語句。 |
| QUIT 或 EXIT( ) | 退出 osql。 |
| Ctrl+C | 結(jié)束查詢但不退出 osql。 |
| !! 和 ED 命令 不再受 osql 支持。 |
僅當(dāng)命令終止符 GO(默認(rèn))、RESET、EXIT、QUIT 和 Ctrl+C 出現(xiàn)在一行的開始(緊跟 osql 提示符)時,才會被識別。
GO 在批處理和執(zhí)行任何緩存 Transact-SQL 語句結(jié)尾時會發(fā)出信號。 在每個輸入行的結(jié)尾按 Enter 鍵時,osql 將緩存此行的語句。 鍵入 GO 后按 Enter 鍵時,所有當(dāng)前已緩存的語句都將作為批處理發(fā)送到 SQL Server。
使用當(dāng)前的 osql 實(shí)用工具時,好像在所執(zhí)行的腳本結(jié)尾處都帶有隱含的 GO,因而將執(zhí)行腳本中的所有語句。
鍵入以命令終止符開始的行可結(jié)束命令。 可以在命令終止符后輸入一個整數(shù)來指定命令運(yùn)行的次數(shù)。 例如,若要執(zhí)行此命令 100 次,可鍵入:
復(fù)制 SELECT x = 1 GO 100命令執(zhí)行結(jié)束之后將打印結(jié)果。 osql 每行的字符數(shù)不得超過 1,000 個。 長語句應(yīng)當(dāng)跨多行書寫。
Windows 的命令撤回功能可用來撤回和修改 osql 語句。 鍵入 RESET 可以清除現(xiàn)有的查詢緩沖區(qū)。
運(yùn)行存儲過程時,osql 在批處理中的每個結(jié)果集之間打印一個空行。 此外,如果沒有應(yīng)用于執(zhí)行的語句,則不會出現(xiàn)“0 行受到影響”消息。
以交互方式使用 osql
若要以交互方式使用 osql,請在命令提示符中鍵入 osql 命令(以及任何選項(xiàng))。
通過鍵入類似下面的命令,可以讀入一個包含由 osql 執(zhí)行的查詢的文件(例如 Stores.qry):
復(fù)制 osql -E -i stores.qry通過鍵入類似下面的命令,可以讀入包含查詢的文件(如 Titles.qry),并將結(jié)果導(dǎo)向其他文件:
復(fù)制 osql -E -i titles.qry -o titles.res| 如果可能,請使用 -E選項(xiàng)(可信連接)。 |
以交互方式使用 osql 時,若要將操作系統(tǒng)文件讀入命令緩沖區(qū),可使用 :rfile_name。 這會將 file_name 中的 SQL 腳本作為一個批處理直接發(fā)送給服務(wù)器。
| 使用 osql 時,如果批處理分隔符“GO”出現(xiàn)在 SQL 腳本文件中,則 SQL Server 會將其視為語法錯誤。 |
插入注釋
可以在 osql 提交給 SQL Server 的 Transact-SQL 語句中包含注釋。 允許使用兩種類型的注釋樣式:-- 和 /*...*/。
使用 EXIT 返回 osql 中的結(jié)果
可以使用 SELECT 語句的結(jié)果作為 osql 的返回值。 如果為數(shù)值,則最后一個結(jié)果行的最后一列將轉(zhuǎn)換為 4 字節(jié)的整數(shù)(長整型)。 MS-DOS 將低字節(jié)傳遞給父進(jìn)程或操作系統(tǒng)錯誤級別。 Windows 則傳遞整個 4 字節(jié)整數(shù)。 語法為:
復(fù)制 EXIT ( < query > )例如:
復(fù)制 EXIT(SELECT @@ROWCOUNT)還可以在批處理文件中包含 EXIT 參數(shù)。 例如:
復(fù)制 osql -E -Q "EXIT(SELECT COUNT(*) FROM '%1')"osql 實(shí)用工具將在圓括號 (?) 中輸入的所有內(nèi)容原樣傳遞給服務(wù)器。 如果存儲系統(tǒng)過程選擇了一個集合并返回一個值,則僅返回選擇的內(nèi)容。 圓括號中無參數(shù)的 EXIT() 語句將執(zhí)行批處理中此語句前的所有內(nèi)容,然后不返回值退出。
EXIT 格式有四種:
-
EXIT
| 不執(zhí)行批處理,立即退出,不返回值。 |
-
EXIT()
| 執(zhí)行批處理后退出,不返回值。 |
-
EXIT(query)
| 執(zhí)行包括查詢的批處理,返回查詢的結(jié)果后退出。 |
-
狀態(tài)為 127 的 RAISERROR。
| 如果在 osql 腳本中使用 RAISERROR,并且出現(xiàn)狀態(tài) 127,則 osql 將退出,并將消息 ID 返回給客戶端。 例如: |
此錯誤將導(dǎo)致 osql 腳本終止,并向客戶端返回消息 ID 50001。
返回值 1 - 99 是為 SQL Server 保留的;osql 可定義下列值:
-
-100
選擇返回值前遇到錯誤。
-
-101
選擇返回值時找不到行。
-
-102
選擇返回值時發(fā)生轉(zhuǎn)換錯誤。
顯示 Money 和 Smallmoney 數(shù)據(jù)類型
osql 只用兩位小數(shù)位數(shù)顯示 money 和 smallmoney 數(shù)據(jù)類型,但 SQL Server 用四位小數(shù)位數(shù)在內(nèi)部存儲值。 請看下例:
復(fù)制 SELECT CAST(CAST(10.3496 AS money) AS decimal(6, 4)) GO此語句的結(jié)果為 10.3496,說明該值是原樣按完整的小數(shù)位存儲的。
請參閱參考
/*...*/(注釋)(MDX) --(注釋)(MDX) CAST 和 CONVERT (Transact-SQL) RAISERROR (Transact-SQL)?
總結(jié)
- 上一篇: 一步一步部署SSIS包图解教程1
- 下一篇: IIS的安装和配置全过程