Transact-SQL 参考

sp_OAMethod

调用 OLE 对象的方法。

语法

sp_OAMethod objecttoken,
    methodname
    [, returnvalue OUTPUT]
    [ , [ @parametername = ] parameter [ OUTPUT ]
    [...n]]

参数

objecttoken

是先前用 sp_OACreate 创建的 OLE 对象令牌。

methodname

是要调用的 OLE 对象的方法名。

returnvalue OUTPUT

是该 OLE 对象的方法的返回值。如果指定,那么它必须是适当数据类型的局部变量。

如果方法返回单个值,那么或者为 returnvalue 指定一个局部变量,以便在该局部变量中返回方法的返回值,或者不指定 returnvalue,以单列、单行结果集的形式将方法返回值返回给客户端。

如果方法返回值是 OLE 对象,那么 returnvalue 必须是数据类型为 int 的局部变量。对象令牌将保存在该局部变量中,并且可由其它 OLE 自动化存储过程使用。

当方法返回值是数组时,如果指定了 returnvalue,那么该值将被设置为 NULL。

在下列情况下会出现错误:

[@parametername =] parameter [OUTPUT]

是方法参数。如果指定,那么 parameter 必须是适当数据类型的值。

若要获取输出参数的返回值,parameter 必须是适当数据类型的局部变量,并且必须指定 OUTPUT。如果指定的是常量参数,或未指定 OUTPUT,那么输出参数的任何返回值均被忽略。

如果指定,则 parametername 必须是 Microsoft® Visual Basic® 命名参数的名称。要注意 @parametername 不并是 Transact-SQL 局部变量。将去掉符号 (@),并将 parametername 作为参数名传递给 OLE 对象。指定所有位置参数后才能指定命名参数。

n

是表示可以指定多个参数的占位符。

说明  @parametername 可以是命名参数,因为它是指定方法的一部分,并将直接传递给对象。此存储过程的其它参数是按位置指定的,而不是按名称。

返回代码值

0(成功)或非零数字(失败),是由 OLE 自动化对象返回的 HRESULT 的整数值。

有关 HRESULT 返回代码的更多信息,请参见 OLE 自动化返回代码和错误信息

结果集

如果方法返回值是一维或二维数组,那么该数组将作为结果集返回给客户端:

当属性返回值或方法返回值是数组时,sp_OAGetPropertysp_OAMethod 将向客户端返回结果集。(方法输出参数不能是数组。)这些过程扫描数组中的所有数据值,以便为该结果集的每一列确定正确的 Microsoft SQL Server™ 数据类型和数据长度。对于某个特定的列,这些过程将使用表示该列中的所有数据值所需要的数据类型和长度。

当一列中的所有数据值都具有相同的数据类型时,此数据类型将用于整个列。当一列中的数据值使用不同的数据类型时,将按下面的图表选择整个列的数据类型。

  int float Money datetime varchar nvarchar
int int float Money varchar varchar nvarchar
float float float Money varchar varchar nvarchar
money money money Money varchar varchar nvarchar
datetime varchar varchar Varchar datetime varchar nvarchar
varchar varchar varchar Varchar varchar varchar nvarchar
nvarchar nvarchar nvarchar Nvarchar nvarchar nvarchar nvarchar

注释

也可用 sp_OAMethod 来获取属性值。

权限

只有 sysadmin 固定服务器角色的成员才能执行 sp_OAMethod

示例
A. 调用方法

下面的示例调用先前创建的 SQLServer 对象的 Connect 方法。

EXEC @hr = sp_OAMethod @object, 'Connect', NULL, 'my_server',
    'my_login', 'my_password'
IF @hr <> 0
BEGIN
   EXEC sp_OAGetErrorInfo @object
    RETURN
END
B. 获取属性

下面的示例获取 HostName 属性(属于先前创建的 SQLServer 对象)并将其存储在局部变量中。

DECLARE @property varchar(255)
EXEC @hr = sp_OAMethod @object, 'HostName', @property OUT
IF @hr <> 0
BEGIN
   EXEC sp_OAGetErrorInfo @object
    RETURN
END
PRINT @property

请参见

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

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

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

OLE 自动化脚本示例