sp_OAMethod (Transact-SQL)
调用一个 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。
如果出现下列任意一种情况,则产生错误:
指定 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_OAGetProperty 或 sp_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