獲取 OLE 自動化錯誤信息。
sp_OAGetErrorInfo [objecttoken ]
[, source OUTPUT]
[, description OUTPUT]
[, helpfile OUTPUT]
[, helpid OUTPUT ]
objecttoken
是先前用 sp_OACreate 創(chuàng)建的 OLE 對象的對象令牌,或 NULL。若指定了 objecttoken,則返回該對象的錯誤信息。若指定為 NULL,則返回整個批處理的錯誤信息。
source OUTPUT
是錯誤信息的來源。如果指定,那么它必須是局部 char、nchar、varchar 或 nvarchar 變量。必要時會截斷返回值以適合局部變量的要求。
description OUTPUT
是錯誤的描述。如果指定,那么它必須是局部 char、nchar、varchar 或 nvarchar 變量。必要時會截斷返回值以適合局部變量的要求。
helpfile OUTPUT
是 OLE 對象的幫助文件。如果指定,那么它必須是局部 char、nchar、varchar 或 nvarchar 變量。必要時會截斷返回值以適合局部變量的要求。
helpid OUTPUT
是幫助文件的上下文 ID。如果指定,那么它必須是局部 int 變量。
說明 此存儲過程的參數按位置指定,而不是按名稱。
0(成功)或非零數字(失敗),是由 OLE 自動化對象返回的 HRESULT 的整數值。
有關 HRESULT 返回代碼的更多信息,請參見 OLE 自動化返回代碼和錯誤信息。
若未指定輸出參數,錯誤信息將作為結果集返回給客戶端。
列名 | 數據類型 | 描述 |
---|---|---|
Error | binary(4) | 錯誤號的二進制表示。 |
Source | nvarchar(nn) | 錯誤的來源。 |
Description | nvarchar(nn) | 錯誤的描述。 |
Helpfile | nvarchar(nn) | 錯誤來源的幫助文件。 |
HelpID | Int | 錯誤來源幫助文件中的幫助上下文 ID。 |
對每個 OLE 自動化存儲過程(sp_OAGetErrorInfo 除外)的調用均會重新設置錯誤信息;因此,sp_OAGetErrorInfo 只能獲取最近一次 OLE 自動化存儲過程調用的錯誤信息。要注意,由于 sp_OAGetErrorInfo 不重新設置錯誤信息,因此可多次調用該過程以獲取相同的錯誤信息。
下表中列出了 OLE 自動化錯誤及它們的一般原因。
錯誤及 HRESULT | 一般原因 |
---|---|
變量類型錯誤 (0x80020008) | 作為方法參數傳遞的 Transact-SQL 值的數據類型與該方法參數的 Microsoft® Visual Basic® 數據類型不匹配,或者將 NULL 值作為方法參數進行了傳遞。 |
未知名稱 (0x8002006) | 指定對象的指定屬性名或方法名未找到。 |
類字符串無效 (0x800401f3) | 在 Microsoft SQL Server™ 實例上,指定的 ProgID 或 CLSID 沒有注冊為 OLE 對象。自定義 OLE 自動化服務器需要在可使用 sp_OACreate 將其實例化之前進行注冊。這可通過進程中的 (.dll) 服務器的 regsvr32.exe 實用工具或本地 (.exe) 服務器的 /REGSERVER 命令行開關來實現。 |
服務器執(zhí)行失敗 (0x80080005) | 指定的 OLE 對象注冊為本地 OLE 服務器(.exe 文件),但是該 .exe 文件找不到或不能啟動。 |
未能找到指定的模塊 (0x8007007e) | 指定的 OLE 對象被注冊為進程內 OLE 服務器(.dll 文件),但是該 .dll 文件找不到或不能被裝載。 |
類型不匹配 (0x80020005) | 用于存儲返回的屬性值或者方法返回值的 Transact-SQL 局部變量的數據類型與屬性或方法返回值的 Visual Basic 數據類型不匹配。或者,要求屬性或方法返回值,但該屬性或方法未返回值。 |
sp_OACreate 的"context"參數的數據類型或值無效。(0x8004275B) | context 參數的值應為 1、4 或 5 中的一個。 |
有關處理 HRESULT 返回代碼的更多信息,請參見 OLE 自動化返回代碼和錯誤信息。
只有 sysadmin 固定服務器角色的成員才能執(zhí)行 sp_OAGetErrorInfo。
下面的示例顯示 OLE 自動化錯誤信息。
DECLARE @output varchar(255)
DECLARE @hr int
DECLARE @source varchar(255)
DECLARE @description varchar(255)
PRINT 'OLE Automation Error Information'
EXEC @hr = sp_OAGetErrorInfo @object, @source OUT, @description OUT
IF @hr = 0
BEGIN
SELECT @output = ' Source: ' + @source
PRINT @output
SELECT @output = ' Description: ' + @description
PRINT @output
END
ELSE
BEGIN
PRINT ' sp_OAGetErrorInfo failed.'
RETURN
END
相關文章