osql 工具 + 生產力,操作sql語句

來源:互聯網
上載者:User

 要想直接在命令列調用sql語句,如下::

osql -E /Q "exit( truncate table cnad.dbo.ss_dataconfig    )"

 

original link:http://technet.microsoft.com/zh-cn/library/ms162806.aspx

使用 osql 工具 + 生產力,可以輸入 Transact-SQL 陳述式、系統過程和指令檔。此工具 + 生產力通過 ODBC 與伺服器通訊。

在 SQL Server 的未來版本中將刪除此功能。請避免在新開發工作中使用此功能,並考慮修改當前使用此功能的應用程式。該工具將由 sqlcmd 代替。有關詳細資料,請參閱 sqlcmd 工具 + 生產力。

文法

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]
]
參數

-?

顯示 osql 開關的文法摘要。

-L

列出在本地配置的伺服器和在網路上廣播的伺服器的名稱。

鑒於網路上廣播的特點,osql 可能不會及時接收來自所有伺服器的響應。因此,每次調用該選項所返回的伺服器列表都可能不同。

-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
安全記事:
若要屏蔽密碼,請不要同時使用 -U-P 選項。相反,應在指定 osql-U 選項和其他開關(不指定 -P)之後,按 Enter 鍵,此時 osql 將提示您輸入密碼。這種方法可以確保輸入密碼時對其屏蔽。

-E

使用信任連接而不請求密碼。

-S server_name[ \ instance_name]

指定要串連到的 SQL Server 執行個體。指定 server_name 將串連到該伺服器上的 SQL Server 預設執行個體。指定 server_name\instance_name 將串連到該伺服器中 SQL Server 的具名執行個體。如果未指定伺服器,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

串連到某個通過用於 SQL Server 的 ODBC 驅動程式定義的 ODBC 資料來源。osql 串連使用該資料來源中指定的選項。

注意:
此選項不適用於為其他驅動程式定義的資料來源。

-c cmd_end

指定命令終止符。預設情況下,可以在行中輸入一個單獨的 GO 來終止命令,並將該命令發送到 SQL Server。如果要重設命令終止符,請勿使用對作業系統有特殊含義的 Transact-SQL 保留字或字元,無論其前面是否有反斜線。

-q " query "

啟動 osql 時執行查詢,但在查詢完成時不退出 osql。(注意查詢語句不應包含 GO)。如果從批次檔中發出查詢,請使用 %variables 或環境 %variables%。例如:

複製代碼
SET table=sys.objects
osql -E -q "select name, object_id from %table%"

將查詢用雙引號括起來,將查詢中嵌入的任何內容用單引號括起來。

-Q " query "

執行查詢並立即退出 osql。將查詢用雙引號括起來,將查詢中嵌入的任何內容用單引號括起來。

-n

從輸入行中刪除編號和提示符號 (>)。

-m error_level

自訂錯誤訊息的顯示。顯示指定的或更高嚴重層級的錯誤的訊息數、狀態和錯誤層級。不顯示低於指定層級的錯誤的資訊。使用 -1 可以指定返回所有標題及其訊息,即使是資訊型訊息。如果使用 -1,則在參數和設定之間不能有空格(可以是 -m-1,不能是 -m -1)。

-r { 0 | 1}

將訊息輸出重新導向到螢幕 (stderr)。如果不指定參數,或指定參數為 0,則僅重新導向嚴重層級為 11 或更高的錯誤資訊。如果指定參數為 1,則將重新導向所有訊息輸出(包括"print")。

-i input_file

標識包含一批 SQL 陳述式或預存程序的檔案。小於 (<) 比較子可以代替 -i 使用。

-o output_file

標識從 osql 接收輸出的檔案。大於 (>) 比較子可以代替 -o 使用。

如果 input_file 不是 Unicode 並且未指定 -u,則以 OEM 格式儲存 output_file。如果 input_file 是 Unicode 或者指定了 -u,則以 Unicode 格式儲存 output_file

-p

列印效能統計資訊。

-b

指定發生錯誤時,osql 退出並返回一個 DOS ERRORLEVEL 值。如果 SQL Server 錯誤訊息的嚴重層級為 11 或更高,DOS ERRORLEVEL 變數返回的值為 1;否則,返回的值為 0。Microsoft MS-DOS 批次檔可以測試 DOS ERRORLEVEL 的值,並對錯誤進行適當的處理。

-u

指定無論 input_file 為何種格式,output_file 都以 Unicode 格式進行儲存。

-R

指定在將貨幣、日期和時間資料轉換為字元資料時,SQL Server ODBC 驅動程式使用用戶端設定。

-O

指定為與 isql 的早期版本行為匹配,停用某些 osql 功能。下列功能停用:

  • EOF 批處理
  • 自動調整控制台寬度
  • 寬訊息

同時還將 DOS ERRORLEVEL 的預設值設定為 -1。

注意:
osql 不再支援 -n-O-D 選項。

備忘

osql 工具 + 生產力從作業系統直接啟動,並且使用本文中列出的區分大小寫選項。啟動後,osql 將接受 SQL 陳述式,然後以互動方式將語句發送到 SQL Server。結果被格式化並在螢幕 (stdout) 上顯示。可使用 QUIT 或 EXIT 退出 osql

如果啟動 osql 時不指定使用者名稱,則 SQL Server 將檢查並使用環境變數,如 osqluser=(user)osqlserver=(server)。如果未設定環境變數,則使用工作站使用者名稱。如果未指定伺服器,則使用工作站名稱。

如果 -U-P 選項都沒有使用,則 SQL Server 將嘗試使用 Microsoft Windows 身分識別驗證模式進行串連。身分識別驗證根據運行 osql 的使用者的 Microsoft Windows 帳戶進行。

osql 工具 + 生產力使用 ODBC API。對於 SQL Server ISO 串連選項,該工具 + 生產力使用 SQL Server ODBC 驅動程式的預設設定。有關詳細資料,請參閱"ANSI 選項的效果"。

注意:
osql 工具 + 生產力不支援 CLR 使用者定義資料類型。若要處理這些資料類型,必須使用 sqlcmd 工具 + 生產力。有關詳細資料,請參閱 sqlcmd 工具 + 生產力。

OSQL 命令

除了 osql 中的 Transact-SQL 陳述式外,還可以使用以下命令。

命令 說明

GO

執行上一個 GO 命令之後輸入的所有語句。

RESET

清除已輸入的所有語句。

QUIT 或 EXIT( )

退出 osql

Ctrl+C

結束查詢但不退出 osql

注意:
osql 不再支援 !!和 ED 命令。

僅當命令終止符 GO(預設)、RESET、EXIT、QUIT 和 Ctrl+C 出現在一行的開始(緊跟 osql 提示符)時,才會被識別。

GO 在批處理和執行任何緩衝 Transact-SQL 陳述式結尾時會發出訊號。在每個輸入行的結尾按 Enter 鍵時,osql 將緩衝此行的語句。鍵入 GO 後按 Enter 鍵時,所有當前已緩衝的語句都將作為批處理髮送到 SQL Server。

使用當前的 osql 工具 + 生產力時,好像在被執行的指令碼結尾處都帶有隱含的 GO,因而將執行指令碼中的所有語句。

鍵入以命令終止符開始的行可結束命令。可以在命令終止符後輸入一個整數來指定命令啟動並執行次數。例如,若要執行此命令 100 次,可鍵入:

複製代碼
SELECT x = 1
GO 100

執行結束後將列印結果。osql 的每個行不能超過 1,000 個字元。長語句應當跨多行書寫。

Windows 的命令撤回功能可用來撤回和修改 osql 語句。鍵入 RESET 可以清除現有的查詢緩衝區。

運行預存程序時,osql 在批處理中的每個結果集之間列印一個空行。此外,如果沒有應用於執行的語句,則不會出現"0 行受到影響"訊息。

以互動方式使用 osql

若要以互動方式使用 osql,請在命令提示字元中鍵入 osql 命令(以及任何選項)。

通過鍵入類似下面的命令,可以讀入一個包含由 osql 執行的查詢的檔案(例如 Stores.qry):

複製代碼
osql -E -i stores.qry

通過鍵入類似下面的命令,可以讀入包含查詢的檔案(如 Titles.qry),並將結果導向其他檔案:

複製代碼
osql -E -i titles.qry -o titles.res
安全記事:
如果可能,請使用 -E 選項(可信串連)。

以互動方式使用 osql 時,若要將作業系統檔案讀入命令緩衝區,可使用 :r file_name。這會將 file_name 中的 SQL 指令碼作為一個批處理直接發送給伺服器。

注意:
使用 osql 時,如果批處理分隔字元"GO"出現在 SQL 指令檔中,則 SQL Server 會將其視為語法錯誤。

插入注釋

可以在 osql 提交給 SQL Server 的 Transact-SQL 陳述式中包含注釋。允許使用兩種類型的注釋樣式:-- 和 /*...*/。

有關詳細資料,請參閱使用注釋。

使用 EXIT 返回 osql 中的結果

可以使用 SELECT 語句的結果作為 osql 的傳回值。第一個結果行的第一列轉換為 4 位元組的整數(Long)。MS-DOS 將低位元組傳遞給父進程或作業系統錯誤層級。Windows 則傳遞整個 4 位元組整數。文法為:

複製代碼
EXIT ( < query > )

例如:

複製代碼
EXIT(SELECT @@ROWCOUNT)

還可以在批次檔中包含 EXIT 參數。例如:

複製代碼
osql -E -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。

傳回值 1 - 99 是為 SQL Server 保留的;osql 可定義下列值:

  • -100

    選擇傳回值前發生錯誤。
  • -101

    選擇傳回值時未找到行。
  • -102

    選擇傳回值時發生轉換錯誤。
顯示 Money 和 Smallmoney 資料類型

osql 只用兩位小數位元顯示 moneysmallmoney 資料類型,但 SQL Server 用四位小數位元在內部儲存這兩類資料的值。請看下例:

複製代碼
SELECT CAST(CAST(10.3496 AS money) AS decimal(6, 4))
GO

此語句的結果為 10.3496,說明該值是原樣按完整的小數位儲存的。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.