分享方式:


sp_OAGetErrorInfo (Transact-SQL)

適用於:SQL Server

取得 OLE Automation 錯誤資訊。

Transact-SQL 語法慣例

語法

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

引數

objecttoken

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

來源 輸出

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

description OUTPUT

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

helpfile OUTPUT

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

helpid OUTPUT

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

注意

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

傳回碼值

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

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

結果集

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

資料行名稱 資料類型 描述
Error binary(4) 錯誤號碼的二進位表示法。
Source nvarchar(nn) 錯誤的來源。
Description 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具現化。 您可以使用公用程式註冊伺服器 Regsvr32.exe.dll) 伺服器,或 /REGSERVER 本機 (.exe) 伺服器的命令行參數。
伺服器執行失敗(0x80080005) 指定的 OLE 物件會註冊為本機 OLE 伺服器(.exe 檔案),但找不到或啟動.exe檔案。
找不到指定的模組 (0x8007007e) 指定的 OLE 物件會註冊為同進程 OLE 伺服器(.dll 檔案),但找不到或載入.dll檔案。
類型不符 (0x80020005) 用來儲存傳回屬性值或方法傳回值之 Transact-SQL 局部變數的數據類型不符合屬性或方法傳回值的 Visual Basic 數據類型。 或者,已要求屬性或方法的傳回值,但不會傳回值。
的 『context』 參數 sp_OACreate 數據類型或值無效。 (0x8004275B) 內容參數的值應該是下列其中一個:1、4 或 5。

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

權限

需要系統管理員固定伺服器角色的成員資格,或直接在此預存程式上執行許可權。 必須啟用 [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 OUTPUT,
    @description OUTPUT;

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;