sp_OAMethod (Transact-SQL)

调用一个 OLE 对象的方法。

主题链接图标 Transact-SQL 语法约定

语法

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。

    如果出现下列任意一种情况,则产生错误:

    • 指定 returnvalue,但是方法并不返回值。

    • 方法返回二维以上的数组。

    • 方法返回一个数组作为输出参数。

  • [ @parametername**=** ] parameter[ OUTPUT ]
    一个方法参数。 如果指定了此参数,则 parameter 必须为具有相应数据类型的值。

    若要获取输出参数的返回值,parameter 必须为具有相应数据类型的局部变量,并且必须指定 OUTPUT。 如果指定的是常量参数,或者未指定 OUTPUT,则输出参数的任何返回值均被忽略。

    如果指定了此参数,则 parametername 必须是 Microsoft Visual Basic 命名参数的名称。 请注意,@parametername并非 Transact-SQL 局部变量。 系统将删除 at 符号 (@),并将 parametername作为参数名传递给 OLE 对象。 指定了所有位置参数后,才能指定命名参数。

  • n
    指示可以指定多个参数的占位符。

    注意注意

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

返回代码值

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

有关 HRESULT 返回代码的详细信息,请参阅 OLE 自动化返回代码和错误信息

结果集

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

  • 一维数组作为单行结果集返回给客户端,其中的列数与数组中的元素数相等。 换言之,该数组以(列)的形式返回。

  • 二维数组作为结果集返回给客户端,其中的列数与数组第一维中的元素数相同,行数与数组第二维中的元素数相同。 换言之,该数组以(列、行)的形式返回。

当属性返回值或方法返回值是数组时,sp_OAGetPropertysp_OAMethod 将向客户端返回结果集。 (方法输出参数不能是数组。这些过程可扫描数组中的所有数据值,以确定用于结果集中各列的相应 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 固定服务器角色的成员身份。

示例

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 自动存储过程 (Transact-SQL)

OLE 自动化脚本示例