佳木斯湛栽影视文化发展公司

主頁(yè) > 知識(shí)庫(kù) > 通過(guò)批處理調(diào)用SQL的方法(osql)

通過(guò)批處理調(diào)用SQL的方法(osql)

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

說(shuō)明 該選項(xiàng)不適用于其它驅(qū)動(dòng)程序定義的數(shù)據(jù)源。

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

控制臺(tái)寬度自動(dòng)調(diào)整

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

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

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

標(biāo)簽:樂(lè)山 滄州 長(zhǎng)治 新疆 紅河 上海 河南 沈陽(yáng)

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

    • 400-1100-266
    嘉荫县| 贵定县| 德江县| 盐池县| 吴忠市| 聂荣县| 南川市| 金山区| 苏尼特右旗| 青田县| 石渠县| 仙游县| 保亭| 蓬安县| 玉门市| 宣城市| 拉萨市| 长丰县| 琼海市| 南投县| 孙吴县| 平顶山市| 尚义县| 和林格尔县| 扎兰屯市| 金门县| 嵊泗县| 蛟河市| 广平县| 绿春县| 安丘市| 徐汇区| 河东区| 会同县| 恭城| 汨罗市| 黑山县| 上思县| 尖扎县| 东阳市| 汤阴县|