主頁 > 知識庫 > 通過批處理調用SQL的方法(osql)

通過批處理調用SQL的方法(osql)

熱門標簽:智能手機 美圖手機 呼叫中心市場需求 銀行業(yè)務 服務器配置 鐵路電話系統(tǒng) 檢查注冊表項 網(wǎng)站文章發(fā)布
osql /U alma /P /i stores.bat
(stores.bat中包含update ,delete語句,不過,不需要使用GO)
----------------------------------------------------
osql 實用工具
osql 實用工具使您得以輸入 Transact-SQL 語句、系統(tǒng)過程和腳本文件。該實用工具通過 ODBC 與服務器通訊。
語法
osql
[-?] ¦
[-L] ¦
[
{
{-U login_id [-P password]}
¦ -E
}
[-S server_name[instance_name]] [-H wksta_name] [-d db_name]
[-l time_out] [-t time_out] [-h headers]
[-s col_separator] [-w column_width] [-a packet_size]
[-e] [-I] [-D data_source_name]
[-c cmd_end] [-q "query"] [-Q "query"]
[-n] [-m error_level] [-r {0 ¦ 1}]
[-i input_file] [-o output_file] [-p]
[-b] [-u] [-R] [-O]
]
參數(shù)-?
顯示 osql 開關的語法摘要。
-L
列出在本地配置的服務器和在網(wǎng)絡上廣播的服務器的名稱。
-U login_id
用戶登錄 ID。登錄 ID 區(qū)分大小寫。
-P password
是用戶指定的密碼。如果未使用 -P 選項,osql 將提示輸入密碼。如果在命令提示符的末尾使用 -P 選項而不帶密碼,osql 使用默認密碼 (NULL)。密碼區(qū)分大小寫。
OSQLPASSWORD 環(huán)境變量使您得以為當前會話設置默認密碼。因此,不需要通過硬編碼來在批處理文件中設置密碼。
如果沒有為 -P 選項指定密碼,osql 首先檢查 OSQLPASSWORD 變量。如果未設置值,osql 使用默認密碼 (NULL)。以下示例在命令提示符處設置 OSQLPASSWORD 變量,然后訪問 osql 實用工具:
C:>SET OSQLPASSWORD=abracadabra
C:>osql
-E
使用信任連接而不請求密碼。
-S server_name[instance_name]
指定要連接的 Microsoft® SQL Server™ 2000 實例。在該服務器上指定 server_name 以連接到 SQL Server 的默認實例。在該服務器上指定 server_nameinstance_name 以連接到一個已命名的 SQL Server 2000 的實例。如果未指定服務器,osql 將連接到本地計算機上的 SQL Server 默認實例。從網(wǎng)絡上的遠程計算機執(zhí)行 osql 時,此選項是必需的。
-H wksta_name
是工作站名稱。工作站名稱存儲在 sysprocesses.hostname 中并由 sp_who 顯示。如果未指定此選項,則采用當前計算機名稱。
-d db_name
啟動 osql 時發(fā)出一個 USE db_name 語句。
-l time_out
指定 osql 登錄超時之前的秒數(shù)。登錄到 osql 的默認超時為 8 秒。
-t time_out
指定命令超時之前的秒數(shù)。如果未指定 time_out 值,則命令不會超時。
-h headers
指定要在列標題之間打印的行數(shù)。默認為每一查詢結果集打印一次標題。用 –1 指定不打印標題。如果使用 -1,則在參數(shù)和設置之間一定不能有空格(可以是 -h-1,不能是 -h –1)。
-s col_separator
指定列分隔符字符,其默認為空格。若要使用對操作系統(tǒng)有特殊含義的字符(例如 ¦ ; >),請將該字符用雙引號 (") 引起來。
-w column_width
允許用戶設置屏幕輸出的寬度。默認為 80 個字符。當輸出行達到其最大屏幕寬度時,會拆分為多個行。
-a packet_size
使您得以請求不同大小的數(shù)據(jù)包。packet_size 的有效值在 512 到 65535 之間。osql 的默認值為服務器的默認值。數(shù)據(jù)包大小的增加可以提高較大腳本執(zhí)行的性能,在這種執(zhí)行中 GO 命令之間 SQL 語句的數(shù)量很重要。Microsoft 的測試表明 8192 是大容量復制操作典型的最快設置??梢哉埱蟾蟮臄?shù)據(jù)包大小,但如果請求不能得到批準,則 osql 默認為服務器的默認值。
-e
回顯輸入。
-I
設置 QUOTED_IDENTIFIER 連接選項為開啟。
-D data_source_name
連接到用 Microsoft SQL Server 的 ODBC 驅動程序定義的 ODBC 數(shù)據(jù)源。osql 連接使用該數(shù)據(jù)源中指定的選項。

說明 該選項不適用于其它驅動程序定義的數(shù)據(jù)源。

-c cmd_end
指定命令終止符。默認情況下,通過單獨在一行中輸入 GO 來終止命令并將其發(fā)送到 SQL Server 2000。在重置命令終止符時,不要使用對操作系統(tǒng)有特殊含義的 Transact-SQL 保留字或字符,無論其前面是否有反斜杠。
-q "query"
啟動 osql 時執(zhí)行查詢,但是在查詢完成時不退出 osql。(注意查詢語句不應包含 GO)。如果從批處理文件中發(fā)出查詢,請使用 %variables 或環(huán)境 %variables%。例如:
SET table = sysobjects
osql /q "Select * from %table%"
將查詢用雙引號引起來,將查詢中嵌入的任何內(nèi)容用單引號引起來。
-Q "query"
執(zhí)行查詢并立即退出 osql。將查詢用雙引號引起來,將查詢中嵌入的任何內(nèi)容用單引號引起來。
-n
從輸入行中刪除編號和提示符號 (>)。
-m error_level
自定義錯誤信息的顯示。顯示指定的或更高嚴重級別錯誤的消息數(shù)、狀態(tài)和錯誤級別。不顯示嚴重級別低于指定級別的錯誤的任何信息。用 -1 指定與消息一起返回所有標題,即使是信息類的消息。如果用 –1,則在參數(shù)和設置之間不能有空格(可以是 -m-1,不能是 -m -1)。
-r {0 ¦ 1}
將消息輸出重定向到屏幕 (stderr)。如果未指定參數(shù),或指定參數(shù)為 0,則僅重定向嚴重級別為 17 或更高的錯誤信息。如果指定參數(shù)為 1,則將重定向所有消息輸出(包括 "print")。
-i input_file
標識包含一批 SQL 語句或存儲過程的文件。小于 ( ) 比較運算符可以用來代替 –i。
-o output_file
標識從 osql 接收輸出的文件。大于 (>) 比較運算符可以用來代替 –o。
如果 input_file 不是 Unicode 并且沒有指定 -u,則 output_file 將存儲為 OEM 格式。如果 input_file 是 Unicode 或者指定了 -u,則 output_file 將存儲為 Unicode 格式。
-p
打印性能統(tǒng)計。
-b
指定發(fā)生錯誤時 osql 退出并返回一個 DOS ERRORLEVEL 值。當 SQL Server 錯誤信息的嚴重級別為 10 或更高時,返回給 DOS ERRORLEVEL 變量的值為 1;否則返回 0。Microsoft MS-DOS® 批處理文件可以測試 DOS ERRORLEVEL 的值并適當處理錯誤。
-u
指定 output_file 存儲為 Unicode 格式,而不管 input_file 為何種格式。
-R
指定在將貨幣、日期和時間數(shù)據(jù)轉換為字符數(shù)據(jù)時 SQL Server ODBC 驅動程序使用客戶端設置。
-O
為與 isql 的早期版本行為匹配,指定停用某些 osql 功能。下列功能停用:
EOF 批處理

控制臺寬度自動調整

寬信息
同時還將 DOS ERRORLEVEL 的默認值設置為 –1。
注釋
osql 實用工具從操作系統(tǒng)直接啟動,并且使用本文中列出的區(qū)分大小寫的選項。啟動后,osql 接受 SQL 語句并將它們交互地發(fā)送到 SQL Server。結果被格式化并顯示在屏幕上 (stdout)??墒褂?QUIT 或 EXIT 退出 osql。
如果啟動 osql 時未指定用戶名,SQL Server 2000 將檢查環(huán)境變量并使用它們,例如 osqluser=(user) 或 osqlserver=(server)。如果未設置環(huán)境變量,則使用工作站用戶名。如果未指定服務器,則使用工作站名稱。
如果 -U 或 -P 選項都沒有使用,則 SQL Server 2000 將嘗試使用 Windows 身份驗證模式進行連接。身份驗證基于運行 osql 的 Microsoft Windows NT® 用戶帳戶。
osql 實用工具使用 ODBC API。該實用工具使用 SQL Server 2000 SQL-92 連接選項的 SQL Server ODBC 驅動程序默認設置。有關更多信息,請參見 SQL-92 選項的效果。
有關此實用工具位置和運行方式的信息,請參見命令提示實用工具入門。
OSQL 命令
除了 osql 中使用的 Transact-SQL 語句外,下表中的命令也可用。
命令 描述
GO 執(zhí)行最后一個 GO 命令之后輸入的所有語句。
RESET 清除已輸入的所有語句。
ED 調用編輯器。
!! command 執(zhí)行操作系統(tǒng)命令。
QUIT 或 EXIT( ) 退出 osql。
CTRL+C 鍵 不退出 osql 而結束查詢。

僅當命令終止符 GO(默認)、RESET、ED、!!、EXIT、QUIT 和 CTRL+C 出現(xiàn)在一行的開始(緊跟 osql 提示符)時才可以識別。osql 忽視同一行中這些關鍵字后輸入的任何內(nèi)容。
GO 表明一批的結束和任何已被高速緩存的 Transact-SQL 語句的執(zhí)行。在每個輸入行的結尾按 ENTER 鍵時,osql 將高速緩存此行的語句。鍵入 GO 后按 ENTER 鍵時,所有當前已緩存的語句都將作為批處理發(fā)送到 SQL Server。
當前的 osql 實用工具工作起來就好像在任何被執(zhí)行的腳本結尾處都帶有隱含的 GO,因而腳本中的所有語句都將執(zhí)行。最后一個 GO 后的任何語句都不執(zhí)行。
通過鍵入以命令終止符作為開始的行來結束命令。可以在命令終止符后輸入一個整數(shù)來指定命令運行的次數(shù)。例如,若要執(zhí)行此命令 100次,請鍵入:
SELECT x = 1
GO 100
執(zhí)行結束時打印一次結果。osql 不接受每行字符數(shù)超過 1,000 的結果。長語句應當跨多個行書寫。
通過在行首鍵入 ED,用戶可以在當前查詢緩沖區(qū)上調用編輯器。編輯器在 EDITOR 環(huán)境變量中定義。默認編輯器為"edit"??梢酝ㄟ^設置 EDITOR 環(huán)境變量來指定其它編輯器。例如,若要將默認編輯器指定為 Notepad,請在操作系統(tǒng)提示符處輸入:
SET EDITOR=notepad
操作系統(tǒng)命令
通過用兩個驚嘆號 (!!) 開始一行,然后輸入命令的方式,也可以執(zhí)行操作系統(tǒng)命令。Windows NT 的命令撤回功能可用來撤回和修改 osql 語句。鍵入 RESET 可以清除現(xiàn)有的查詢緩沖區(qū)。
在運行存儲過程時,osql 在批處理中的每個結果集之間打印一個空行。此外,如果沒有應用于已執(zhí)行的語句,則"0 行受到影響"消息不會出現(xiàn)。
交互性使用 osql
若要交互性使用 osql,請在命令提示符處鍵入 osql 命令(以及任何選項)。
可以通過鍵入類似下行的命令,在包含由 osql 執(zhí)行的查詢的文件(例如 Stores.qry)中進行讀?。?
osql /U alma /P /i stores.qry
該文件必須包含命令終止符。
可以通過鍵入類似下行的命令,在包含查詢的文件(例如 Titles.qry)中進行讀取并將結果導向另一文件:
osql /U alma /P /i titles.qry /o titles.res
交互性使用 osql 時,為把操作系統(tǒng)文件讀入到命令緩沖區(qū),可使用:r file_name。不要在文件中包含命令終止符;在完成編輯后交互輸入終止符。
插入注釋
在 osql 提交給 SQL Server 的 Transact-SQL 語句中可以包含注釋。允許使用兩種注釋風格類型:-- 和 /*...*/。
有關更多信息,請參見使用注釋。
使用 EXIT 返回 osql 結果
可以使用 SELECT 語句的結果作為 osql 的返回值。第一個結果行的第一列轉換為 4 字節(jié)的整數(shù)(長整型)。MS-DOS 將低字節(jié)傳遞給父進程或操作系統(tǒng)錯誤級別。Windows NT 則傳遞整個 4 字節(jié)整數(shù)。語法為:
EXIT(query)
例如:
EXIT(SELECT @@ROWCOUNT)
EXIT(SELECT 5)
也可以包含 EXIT 參數(shù),使其作為批處理文件的一部分。例如:
osql /Q "EXIT(SELECT COUNT(*) FROM '%1')"
osql 實用工具將圓括號 ( ) 中輸入的所有內(nèi)容原樣傳遞給服務器。如果存儲系統(tǒng)過程選擇了一個集合并返回一個值,則僅返回選擇的內(nèi)容。在圓括號之間無參數(shù)的 EXIT( ) 語句執(zhí)行批處理中此語句前的所有內(nèi)容,然后退出,而不返回值。
EXIT 格式有四種:
EXIT
不執(zhí)行批處理就立即退出,無返回值。
EXIT( )
執(zhí)行批處理后退出,無返回值。
EXIT(query)
執(zhí)行包括查詢的批處理,返回查詢的結果后退出。
狀態(tài)為 127 的 RAISERROR。
如果在 osql 腳本中使用 RAISERROR,并且出現(xiàn)狀態(tài) 127,則 osql 會退出并將消息 ID 返回給客戶程序。例如:
RAISERROR(50001, 10, 127)
該錯誤會導致 osql 腳本終止并將消息 ID 50001 返回給客戶程序。
SQL Server 保留介于 -1 到 -99 之間的返回值;osql 定義下列值:
-100
選擇返回值前遇到的錯誤。
-101
選擇返回值時找不到行。
-102
選擇返回值時發(fā)生轉換錯誤。
顯示 money 和 smallmoney 數(shù)據(jù)類型
osql 只用兩位小數(shù)位數(shù)顯示 money 和 smallmoney 數(shù)據(jù)類型,但 SQL Server 用四位小數(shù)位數(shù)在內(nèi)部存儲這兩類數(shù)據(jù)的值。請看下例:
SELECT CAST(CAST(10.3496 AS money) AS decimal(6, 4))
此語句的結果為 10.3496,說明該值是原樣按完整的小數(shù)位存儲的。
'----------------------------------------------------------------------------------------------------------
先把你這條語句保存在一個.sql的文件里。
然后.bat文件里這樣寫

osql -s [服務器] -U [用戶名] -P [密碼] -d [數(shù)據(jù)庫] -n -i [.sql文件]
把中括號去掉
您可能感興趣的文章:
  • 使用 Osql 工具管理 SQL Server 桌面引擎 (MSDE 2000)應用介紹
  • sqlserver中通過osql/ocmd批處理批量執(zhí)行sql文件的方法

標簽:樂山 滄州 長治 新疆 紅河 上海 河南 沈陽

巨人網(wǎng)絡通訊聲明:本文標題《通過批處理調用SQL的方法(osql)》,本文關鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266