获取 OLE 自动化错误信息。
sp_OAGetErrorInfo [objecttoken ]
[, source OUTPUT]
[, description OUTPUT]
[, helpfile OUTPUT]
[, helpid OUTPUT ]
objecttoken
是先前用 sp_OACreate 创建的 OLE 对象的对象令牌,或 NULL。若指定了 objecttoken,则返回该对象的错误信息。若指定为 NULL,则返回整个批处理的错误信息。
source OUTPUT
是错误信息的来源。如果指定,那么它必须是局部 char、nchar、varchar 或 nvarchar 变量。必要时会截断返回值以适合局部变量的要求。
description OUTPUT
是错误的描述。如果指定,那么它必须是局部 char、nchar、varchar 或 nvarchar 变量。必要时会截断返回值以适合局部变量的要求。
helpfile OUTPUT
是 OLE 对象的帮助文件。如果指定,那么它必须是局部 char、nchar、varchar 或 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
相关文章