Transact-SQL 参考

sp_OAGetErrorInfo

获取 OLE 自动化错误信息。

语法

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

参数

objecttoken

是先前用 sp_OACreate 创建的 OLE 对象的对象令牌,或 NULL。若指定了 objecttoken,则返回该对象的错误信息。若指定为 NULL,则返回整个批处理的错误信息。

source OUTPUT

是错误信息的来源。如果指定,那么它必须是局部 charncharvarchar nvarchar 变量。必要时会截断返回值以适合局部变量的要求。

description OUTPUT

是错误的描述。如果指定,那么它必须是局部 charncharvarchar nvarchar 变量。必要时会截断返回值以适合局部变量的要求。

helpfile OUTPUT

是 OLE 对象的帮助文件。如果指定,那么它必须是局部 charncharvarchar 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 命令行开关来实现。
服务器执行失败
(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 固定服务器角色的成员才能执行 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

请参见

使用 OLE 自动化存储过程进行数据类型转换

如何创建 OLE 自动化对象 (Transact-SQL)

如何调试自定义 OLE 自动化服务器 (Transact-SQL)

OLE 自动化脚本示例