sp_OAMethod (Transact-SQL)
适用于:SQL Server
调用一个 OLE 对象的方法。
语法
sp_OAMethod objecttoken , methodname
[ , returnvalue OUTPUT ]
[ , [ @parametername = ] parameter [ OUTPUT ] [ ...n ] ]
参数
objecttoken
以前使用 sp_OACreate 创建的 OLE 对象的对象标记。
methodname
要调用的 OLE 对象的方法名。
returnvalueOUTPUT
OLE 对象的方法的返回值。 如果指定此参数,则必须是相应数据类型的局部变量。
如果方法返回单个值,请为 returnvalue 指定局部变量(返回局部变量中的方法返回值),或者不指定 returnvalue,后者将方法返回值作为单列单行结果集返回给客户端。
如果方法返回值是 OLE 对象, 则 returnvalue 必须是数据类型 int 的局部变量。对象令牌存储在本地变量中,并且此对象令牌可以与其他 OLE 自动化存储过程一起使用。
当方法返回值为数组时,如果指定 了 returnvalue ,则将其设置为 NULL。
如果出现下列任意一种情况,则产生错误:
指定了 returnvalue,但 方法不返回值。
方法返回二维以上的数组。
方法返回一个数组作为输出参数。
[ _@parametername = ] parameter[ OUTPUT ]
是方法参数。 如果指定, 参数 必须是相应数据类型的值。
若要获取输出参数的返回值, 参数 必须是相应数据类型的局部变量,并且必须指定 OUTPUT 。 如果指定了常量参数,或者如果未指定 OUTPUT ,则忽略输出参数中的任何返回值。
如果指定, parametername 必须是 Microsoft Visual Basic 命名参数的名称。 请注意, @_parametername_is不是 Transact-SQL 本地变量。 删除) (@ at 符号, 并将参数名称作为参数名称传递给 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 固定服务器角色的成员身份或直接对此存储过程执行权限。 Ole Automation Procedures
必须 启用 配置才能使用与 OLE 自动化相关的任何系统过程。
示例
A. 调用一个方法
以下示例调用 Connect
以前创建的 SQLServer 对象的 方法。
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;