sp_OAGetErrorInfo (Transact-SQL)

適用於:SQL Server

取得 OLE Automation 錯誤資訊。

Transact-SQL 語法慣例

語法

  
sp_OAGetErrorInfo [ objecttoken ]  
    [ , source OUTPUT ]   
    [ , description OUTPUT ]   
    [ , helpfile OUTPUT ]   
    [ , helpid OUTPUT ]   

引數

objecttoken
這是先前使用 sp_OACreate 所建立之 OLE 物件的物件標記,或是 NULL。 如果 指定 objecttoken ,則會傳回該對象的錯誤資訊。 如果指定 NULL,則會傳回整個批次的錯誤資訊。

來源輸出
這是錯誤資訊的來源。 如果指定,它必須是本機 charncharvarchar 或 nvarchar 變數。 如有需要,會截斷傳回值以符合局部變數。

descriptionOUTPUT
這是錯誤的描述。 如果指定,它必須是本機 charncharvarchar 或 nvarchar 變數。 如有需要,會截斷傳回值以符合局部變數。

helpfileOUTPUT
這是 OLE 對象的說明檔。 如果指定,它必須是本機 charncharvarchar 或 nvarchar 變數。 如有需要,會截斷傳回值以符合局部變數。

helpidOUTPUT
這是說明檔內容識別碼。 如果指定,它必須是區域 int 變數。

注意

這個預存程式的參數是由位置指定,而不是名稱。

傳回碼值

0 (success) 或非零數位 (failure),這是 OLE Automation 物件所傳回之 HRESULT 的整數值。

如需 HRESULT 傳回碼的詳細資訊,請參閱 OLE Automation 傳回碼和錯誤資訊

結果集

如果未指定任何輸出參數,錯誤資訊會以結果集的形式傳回給用戶端。

資料行名稱 資料類型 描述
錯誤 binary(4) 錯誤號碼的二進位表示法。
來源 nvarchar(nn) 錯誤的來源。
說明 nvarchar(nn) 錯誤的描述。
Helpfile nvarchar(nn) 來源的說明檔。
HelpID int 說明來源檔案中的說明內容識別碼。

備註

每次呼叫 OLE Automation 預存程式時(sp_OAGetErrorInfo除外)都會重設錯誤資訊;因此,sp_OAGetErrorInfo只會針對最新的 OLE Automation 預存過程調用取得錯誤資訊。 請注意,由於 sp_OAGetErrorInfo 不會重設錯誤資訊,所以可以多次呼叫以取得相同的錯誤資訊。

下表列出 OLE 自動化錯誤及其常見原因。

錯誤和 HRESULT 常見原因
不正確的變數類型 (0x80020008) 當做方法參數傳遞的 Transact-SQL 值數據類型與方法參數的 Microsoft Visual Basic 數據類型不符,或以方法參數的形式傳遞 NULL 值。
未知的名稱(0x8002006) 找不到指定物件的指定屬性或方法名稱。
不合法的類別字串 (0x800401f3) 指定的 ProgID 或 CLSID 不會註冊為 SQL Server 實例上的 OLE 物件。 自定義 OLE 自動化伺服器必須先註冊,才能使用 sp_OACreate具現化。 這可以透過使用 In-process (.dll) 伺服器的 Regsvr32.exe 公用程式,或 本機 (.exe) 伺服器的 /REGSERVER 命令行參數來完成。
伺服器執行失敗(0x80080005) 指定的 OLE 物件會註冊為本機 OLE 伺服器 (.exe 檔案),但找不到或啟動 .exe 檔案。
找不到指定的模組 (0x8007007e) 指定的 OLE 物件會註冊為同進程 OLE 伺服器 (.dll 檔案),但找不到或載入 .dll 檔案。
類型不符 (0x80020005) 用來儲存傳回屬性值或方法傳回值之 Transact-SQL 局部變數的數據類型不符合屬性或方法傳回值的 Visual Basic 數據類型。 或者,已要求屬性或方法的傳回值,但不會傳回值。
sp_OACreate 『context』 參數的數據類型或值無效。 (0x8004275B) 內容參數的值應該是下列其中一個:1、4 或 5。

如需處理 HRESULT 傳回碼的詳細資訊,請參閱 OLE Automation 傳回碼和錯誤資訊

權限

需要系統管理員固定伺服器角色的成員資格,或直接在此預存程式上執行許可權。 Ole Automation Procedures 必須 啟用 組態,才能使用任何與 OLE Automation 相關的系統程式。

範例

下列範例會顯示 OLE Automation 錯誤資訊。

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;  

另請參閱

OLE Automation 預存程序 (Transact-SQL)
OLE 自動化範例腳本