通過批處理調用SQL的方法(osql)_DOS/BAT
來源:互聯網
上載者:User
osql /U alma /P /i stores.bat
(stores.bat中包含update ,delete語句,不過,不需要使用GO)
----------------------------------------------------
osql 工具 + 生產力
osql 工具 + 生產力使您得以輸入 Transact-SQL 陳述式、系統過程和指令檔。該工具 + 生產力通過 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]
]
參數-?
顯示 osql 開關的文法摘要。
-L
列出在本地配置的伺服器和在網路上廣播的伺服器的名稱。
-U login_id
使用者登入 ID。登入 ID 區分大小寫。
-P password
是使用者指定的密碼。如果未使用 -P 選項,osql 將提示輸入密碼。如果在命令提示字元的末尾使用 -P 選項而不帶密碼,osql 使用預設密碼 (NULL)。密碼區分大小寫。
OSQLPASSWORD 環境變數使您得以為當前會話設定預設密碼。因此,不需要通過寫入程式碼來在批次檔中設定密碼。
如果沒有為 -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 預設執行個體。從網路上的遠端電腦執行 osql 時,此選項是必需的。
-H wksta_name
是工作站名稱。工作站名稱儲存在 sysprocesses.hostname 中並由 sp_who 顯示。如果未指定此選項,則採用當前電腦名稱。
-d db_name
啟動 osql 時發出一個 USE db_name 語句。
-l time_out
指定 osql 登入逾時之前的秒數。登入到 osql 的預設逾時為 8 秒。
-t time_out
指定命令逾時之前的秒數。如果未指定 time_out 值,則命令不會逾時。
-h headers
指定要在欄位標題之間列印的行數。預設為每一查詢結果集列印一次標題。用 –1 指定不列印標題。如果使用 -1,則在參數和設定之間一定不能有空格(可以是 -h-1,不能是 -h –1)。
-s col_separator
指定資料行分隔符號字元,其預設為空白格。若要使用對作業系統有特殊含義的字元(例如 ¦ ; & < >),請將該字元用雙引號 (") 引起來。
-w column_width
允許使用者佈建螢幕輸出的寬度。預設為 80 個字元。當輸出行達到其最大螢幕寬度時,會拆分為多個行。
-a packet_size
使您得以請求不同大小的資料包。packet_size 的有效值在 512 到 65535 之間。osql 的預設值為伺服器的預設值。資料包大小的增加可以提高較大指令碼執行的效能,在這種執行中 GO 命令之間 SQL 陳述式的數量很重要。Microsoft 的測試表明 8192 是大量複製操作典型的最快設定。可以請求更大的資料包大小,但如果請求不能得到批准,則 osql 預設為伺服器的預設值。
-e
回顯輸入。
-I
設定 QUOTED_IDENTIFIER 串連選項為開啟。
-D data_source_name
串連到用 Microsoft SQL Server 的 ODBC 驅動程式定義的 ODBC 資料來源。osql 串連使用該資料來源中指定的選項。
說明 該選項不適用於其它驅動程式定義的資料來源。
-c cmd_end
指定命令終止符。預設情況下,通過單獨在一行中輸入 GO 來終止命令並將其發送到 SQL Server 2000。在重設命令終止符時,不要使用對作業系統有特殊含義的 Transact-SQL 保留字或字元,無論其前面是否有反斜線。
-q "query"
啟動 osql 時執行查詢,但是在查詢完成時不退出 osql。(注意查詢語句不應包含 GO)。如果從批次檔中發出查詢,請使用 %variables 或環境 %variables%。例如:
SET table = sysobjects
osql /q "Select * from %table%"
將查詢用雙引號引起來,將查詢中嵌入的任何內容用單引號引起來。
-Q "query"
執行查詢並立即退出 osql。將查詢用雙引號引起來,將查詢中嵌入的任何內容用單引號引起來。
-n
從輸入行中刪除編號和提示符號 (>)。
-m error_level
自訂錯誤資訊的顯示。顯示指定的或更高嚴重層級錯誤的訊息數、狀態和錯誤層級。不顯示嚴重層級低於指定層級的錯誤的任何資訊。用 -1 指定與訊息一起返回所有標題,即使是資訊類的訊息。如果用 –1,則在參數和設定之間不能有空格(可以是 -m-1,不能是 -m -1)。
-r {0 ¦ 1}
將訊息輸出重新導向到螢幕 (stderr)。如果未指定參數,或指定參數為 0,則僅重新導向嚴重層級為 17 或更高的錯誤資訊。如果指定參數為 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
列印效能統計。
-b
指定發生錯誤時 osql 退出並返回一個 DOS ERRORLEVEL 值。當 SQL Server 錯誤資訊的嚴重層級為 10 或更高時,返回給 DOS ERRORLEVEL 變數的值為 1;否則返回 0。Microsoft MS-DOS® 批次檔可以測試 DOS ERRORLEVEL 的值並適當處理錯誤。
-u
指定 output_file 儲存為 Unicode 格式,而不管 input_file 為何種格式。
-R
指定在將貨幣、日期和時間資料轉換為字元資料時 SQL Server ODBC 驅動程式使用用戶端設定。
-O
為與 isql 的早期版本行為匹配,指定停用某些 osql 功能。下列功能停用:
EOF 批處理
控制台寬度自動調整
寬資訊
同時還將 DOS ERRORLEVEL 的預設值設定為 –1。
注釋
osql 工具 + 生產力從作業系統直接啟動,並且使用本文中列出的區分大小寫選項。啟動後,osql 接受 SQL 陳述式並將它們互動地發送到 SQL Server。結果被格式化並顯示在螢幕上 (stdout)。可使用 QUIT 或 EXIT 退出 osql。
如果啟動 osql 時未指定使用者名稱,SQL Server 2000 將檢查環境變數並使用它們,例如 osqluser=(user) 或 osqlserver=(server)。如果未設定環境變數,則使用工作站使用者名稱。如果未指定伺服器,則使用工作站名稱。
如果 -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 執行最後一個 GO 命令之後輸入的所有語句。
RESET 清除已輸入的所有語句。
ED 調用編輯器。
!! command 執行作業系統命令。
QUIT 或 EXIT( ) 退出 osql。
CTRL+C 鍵 不退出 osql 而結束查詢。
僅當命令終止符 GO(預設)、RESET、ED、!!、EXIT、QUIT 和 CTRL+C 出現在一行的開始(緊跟 osql 提示符)時才可以識別。osql 忽視同一行中這些關鍵字後輸入的任何內容。
GO 表明一批的結束和任何已被快取的 Transact-SQL 陳述式的執行。在每個輸入行的結尾按 ENTER 鍵時,osql 將快取此行的語句。鍵入 GO 後按 ENTER 鍵時,所有當前已緩衝的語句都將作為批處理髮送到 SQL Server。
當前的 osql 工具 + 生產力工作起來就好像在任何被執行的指令碼結尾處都帶有隱含的 GO,因而指令碼中的所有語句都將執行。最後一個 GO 後的任何語句都不執行。
通過鍵入以命令終止符作為開始的行來結束命令。可以在命令終止符後輸入一個整數來指定命令啟動並執行次數。例如,若要執行此命令 100次,請鍵入:
SELECT x = 1
GO 100
執行結束時列印一次結果。osql 不接受每行字元數超過 1,000 的結果。長語句應當跨多個行書寫。
通過在行首鍵入 ED,使用者可以在當前查詢緩衝區上調用編輯器。編輯器在 EDITOR 環境變數中定義。預設編輯器為"edit"。可以通過設定 EDITOR 環境變數來指定其它編輯器。例如,若要將預設編輯器指定為 Notepad,請在作業系統提示符處輸入:
SET EDITOR=notepad
作業系統命令
通過用兩個驚歎號 (!!) 開始一行,然後輸入命令的方式,也可以執行作業系統命令。Windows NT 的命令撤回功能可用來撤回和修改 osql 語句。鍵入 RESET 可以清除現有的查詢緩衝區。
在運行預存程序時,osql 在批處理中的每個結果集之間列印一個空行。此外,如果沒有應用於已執行的語句,則"0 行受到影響"訊息不會出現。
互動性使用 osql
若要互動性使用 osql,請在命令提示字元處鍵入 osql 命令(以及任何選項)。
可以通過鍵入類似下行的命令,在包含由 osql 執行的查詢的檔案(例如 Stores.qry)中進行讀取:
osql /U alma /P /i stores.qry
該檔案必須包含命令終止符。
可以通過鍵入類似下行的命令,在包含查詢的檔案(例如 Titles.qry)中進行讀取並將結果導向另一檔案:
osql /U alma /P /i titles.qry /o titles.res
互動性使用 osql 時,為把作業系統檔案讀入到命令緩衝區,可使用:r file_name。不要在檔案中包含命令終止符;在完成編輯後互動輸入終止符。
插入注釋
在 osql 提交給 SQL Server 的 Transact-SQL 陳述式中可以包含注釋。允許使用兩種注釋風格類型:-- 和 /*...*/。
有關更多資訊,請參見使用注釋。
使用 EXIT 返回 osql 結果
可以使用 SELECT 語句的結果作為 osql 的傳回值。第一個結果行的第一列轉換為 4 位元組的整數(長整型)。MS-DOS 將低位元組傳遞給父進程或作業系統錯誤層級。Windows NT 則傳遞整個 4 位元組整數。文法為:
EXIT(query)
例如:
EXIT(SELECT @@ROWCOUNT)
EXIT(SELECT 5)
也可以包含 EXIT 參數,使其作為批次檔的一部分。例如:
osql /Q "EXIT(SELECT COUNT(*) FROM '%1')"
osql 工具 + 生產力將圓括弧 ( ) 中輸入的所有內容原樣傳遞給伺服器。如果儲存系統過程選擇了一個集合并返回一個值,則僅返回選擇的內容。在圓括弧之間無參數的 EXIT( ) 語句執行批處理中此語句前的所有內容,然後退出,而不傳回值。
EXIT 格式有四種:
EXIT
不執行批處理就立即退出,無傳回值。
EXIT( )
執行批處理後退出,無傳回值。
EXIT(query)
執行包括查詢的批處理,返回查詢的結果後退出。
狀態為 127 的 RAISERROR。
如果在 osql 指令碼中使用 RAISERROR,並且出現狀態 127,則 osql 會退出並將訊息 ID 返回給客戶程式。例如:
RAISERROR(50001, 10, 127)
該錯誤會導致 osql 指令碼終止並將訊息 ID 50001 返回給客戶程式。
SQL Server 保留介於 -1 到 -99 之間的傳回值;osql 定義下列值:
-100
選擇傳回值前遇到的錯誤。
-101
選擇傳回值時找不到行。
-102
選擇傳回值時發生轉換錯誤。
顯示 money 和 smallmoney 資料類型
osql 只用兩位小數位元顯示 money 和 smallmoney 資料類型,但 SQL Server 用四位小數位元在內部儲存這兩類資料的值。請看下例:
SELECT CAST(CAST(10.3496 AS money) AS decimal(6, 4))
此語句的結果為 10.3496,說明該值是原樣按完整的小數位儲存的。
'----------------------------------------------------------------------------------------------------------
先把你這條語句儲存在一個.sql的檔案裡。
然後.bat檔案裡這樣寫
osql -s [伺服器] -U [使用者名稱] -P [密碼] -d [資料庫] -n -i [.sql檔案]
把中括弧去掉