sp_OAGetErrorInfo (Transact-SQL)

适用于:SQL Server

获取 OLE 自动化错误信息。

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
帮助文件的上下文 ID。 如果指定,它必须是局部 int 变量。

注意

此存储过程的参数按位置(而不是按名称)指定。

返回代码值

0(成功)或非零数字(失败),是由 OLE 自动化对象返回的 HRESULT 整数值。

有关 HRESULT 返回代码的详细信息,请参阅 OLE 自动化返回代码和错误信息

结果集

如果未指定输出参数,错误信息将作为结果集返回给客户端。

列 名 数据类型 描述
错误 binary(4) 错误号的二进制表示形式。
Source nvarchar(nn) 错误的来源。
描述 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) 指定的 ProgID 或 CLSID 未在 SQL Server 实例上注册为 OLE 对象。 必须先注册自定义 OLE 自动化服务器,然后才能使用 sp_OACreate实例化它们。 这可以通过对进程内服务器(.dll)服务器使用 Regsvr32.exe 实用工具或本地 (.exe) 服务器的 /REG标准版RVER 命令行开关来完成。
服务器执行失败(0x80080005) 指定的 OLE 对象已注册为本地 OLE 服务器(.exe 文件),但无法找到或启动该 .exe 文件。
找不到指定的模块(0x8007007e) 指定的 OLE 对象已注册为进程内 OLE 服务器(.dll 文件),但无法找到或半截该 .dll 文件。
类型不匹配(0x80020005) 用于存储返回的属性值或方法返回值的 Transact-SQL 局部变量的数据类型与属性或方法返回值的 Visual Basic 数据类型不匹配。 或者,要求属性或方法返回值,但该属性或方法未返回值。
sp_OACreate“context”参数的数据类型或值无效。 (0x8004275B) 上下文参数值应为下列值之一:1、4 或 5。

有关处理 HRESULT 返回代码的详细信息,请参阅 OLE 自动化返回代码和错误信息

权限

需要 sysadmin 固定服务器角色的成员身份或直接在此存储过程上执行权限。 Ole Automation Procedures 必须 启用 配置才能使用与 OLE 自动化相关的任何系统过程。

示例

以下示例将显示 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;  

另请参阅

OLE 自动存储过程 (Transact-SQL)
OLE 自动化脚本示例