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 变量。 必要时将截断返回值以适合局部变量的要求。

description OUTPUT

对错误的说明。 如果指定,它必须是本地 charncharvarchar 或 nvarchar 变量。 必要时将截断返回值以适合局部变量的要求。

helpfile OUTPUT

OLE 对象的帮助文件。 如果指定,它必须是本地 charncharvarchar 或 nvarchar 变量。 必要时将截断返回值以适合局部变量的要求。

helpid OUTPUT

帮助文件上下文 ID。 如果指定,它必须是局部 int 变量。

注意

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

返回代码值

0 (success) 或非零数 (failure) 是 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) 指定的 ProgID 或 CLSID 未在 SQL Server 实例上注册为 OLE 对象。 必须先注册自定义 OLE 自动化服务器,然后才能使用 sp_OACreate它们进行实例化。 可以使用进程内 (.dll) 服务器的/REGSERVER实用工具或本地 (.exe) 服务器的命令行开关来注册Regsvr32.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 自动化返回代码和错误信息

权限

需要 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 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;