sp_OAGetErrorInfo (Transact-SQL)
适用范围:SQL Server
获取 OLE 自动化错误信息。
语法
sp_OAGetErrorInfo [ objecttoken ]
[ , source OUTPUT ]
[ , description OUTPUT ]
[ , helpfile OUTPUT ]
[ , helpid OUTPUT ]
[ ; ]
参数
objecttoken
以前使用 sp_OACreate
创建的 OLE 对象的对象标记,或者 NULL
。 如果 指定 objecttoken ,则返回该对象的错误信息。 如果 NULL
已指定,则返回整个批处理的错误信息。
源 输出
错误信息的来源。 如果指定,它必须是本地 char、nchar、varchar 或 nvarchar 变量。 必要时将截断返回值以适合局部变量的要求。
description OUTPUT
对错误的说明。 如果指定,它必须是本地 char、nchar、varchar 或 nvarchar 变量。 必要时将截断返回值以适合局部变量的要求。
helpfile OUTPUT
OLE 对象的帮助文件。 如果指定,它必须是本地 char、nchar、varchar 或 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;