sp_OAGetProperty (Transact-SQL)

适用范围:SQL Server

获取 OLE 对象的属性值。

Transact-SQL 语法约定

语法

sp_OAGetProperty objecttoken , propertyname
    [ , propertyvalue OUTPUT ]
    [ , index... ]
[ ; ]

参数

objecttoken

以前使用 sp_OACreate 创建的 OLE 对象的对象标记。

propertyname

要返回的 OLE 对象的属性名称。

propertyvalue OUTPUT

返回的属性值。 如果指定此参数,则必须是相应数据类型的局部变量。

如果该属性返回 OLE 对象, 则 propertyvalue 必须是数据类型 int 的局部变量。对象令牌存储在本地变量中,此对象令牌可用于其他 OLE 自动化存储过程。

如果属性返回单个值,则为以下任一值:

  • 指定 propertyvalue局部变量,该变量返回局部变量中的属性值;或
  • 不要指定 propertyvalue,它将属性值作为单列单行结果集返回给客户端。

当属性返回数组时,如果 指定了 propertyvalue ,则将其设置为 NULL

如果 指定了 propertyvalue ,但该属性未返回值,则会发生错误。 如果属性返回二维以上的数组,也将出现错误。

索引

索引参数。 如果指定, 索引 必须是相应数据类型的值。

有些属性包含参数。 这些属性称为索引化属性,相应的参数被称为索引参数。 一个属性可有多个索引参数。

注意

此存储过程的参数按位置(而不是按名称)指定。

返回代码值

0 (success) 或非零数 (failure) 是 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 固定服务器角色的成员身份或直接在此存储过程上执行权限。 必须启用 Ole Automation Procedures 服务器配置选项,才能使用与 OLE 自动化相关的任何系统过程。

示例

A. 使用局部变量

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

DECLARE @property VARCHAR(255);

EXEC @hr = sp_OAGetProperty @object,
    'HostName',
    @property OUTPUT;

IF @hr <> 0
BEGIN
    EXEC sp_OAGetErrorInfo @object

    RETURN
END

PRINT @property;

B. 使用结果集

以下示例获取 HostName 属性(以前创建 SQLServer 的对象),并将其作为结果集返回到客户端。

EXEC @hr = sp_OAGetProperty @object,
    'HostName';

IF @hr <> 0
BEGIN
    EXEC sp_OAGetErrorInfo @object

    RETURN
END;