sp_OAGetErrorInfo (Transact-SQL)
获取 OLE 自动化错误信息。
语法
sp_OAGetErrorInfo [ objecttoken ]
[ , source OUTPUT ]
[ , description OUTPUT ]
[ , helpfile OUTPUT ]
[ , helpid OUTPUT ]
参数
objecttoken
先前使用 sp_OACreate 创建的 OLE 对象的对象标记,或者为 NULL。如果指定了 objecttoken,则返回该对象的错误信息。如果指定为 NULL,则返回整个批处理的错误信息。sourceOUTPUT
错误信息的源。如果指定了此参数,则此参数必须为 char、nchar、varchar 或 nvarchar 局部变量。必要时将截断返回值以适合局部变量的要求。descriptionOUTPUT
错误说明。如果指定该参数,则该参数是 char、nchar、varchar 或 nvarchar 类型的局部变量。必要时将截断返回值以适合局部变量的要求。helpfileOUTPUT
OLE 对象的帮助文件。如果指定了此参数,则此参数必须为 char、nchar、varchar 或 nvarchar 局部变量。必要时将截断返回值以适合局部变量的要求。helpidOUTPUT
帮助文件上下文 ID。如果指定该参数,则该参数必须是 int 类型的局部变量。注意 此存储过程的参数按位置(而不是按名称)指定。
结果集
如果未指定输出参数,错误信息将作为结果集返回给客户端。
列名 |
数据类型 |
说明 |
---|---|---|
Error |
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 值的数据类型与方法参数的 MicrosoftVisual Basic 数据类型不匹配,或者已将 NULL 值作为方法参数传递。 |
未知名称 (0x8002006) |
找不到指定对象的指定属性名或方法名。 |
类字符串无效 (0x800401f3) |
没有将指定的 ProgID 或 CLSID 没有注册为 SQL Server 实例的 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) |
上下文参数值应为下列值之一:1、4 或 5。 |
有关处理 HRESULT 返回代码的详细信息,请参阅 OLE 自动化返回代码和错误信息。
权限
要求具有 sysadmin 固定服务器角色的成员身份。
示例
以下示例将显示 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