sp_OAGetProperty (Transact-SQL)
适用范围:SQL Server
获取 OLE 对象的属性值。
语法
sp_OAGetProperty objecttoken , propertyname
[ , propertyvalue OUTPUT ]
[ , index... ]
[ ; ]
参数
objecttoken
以前使用 sp_OACreate
创建的 OLE 对象的对象标记。
propertyname
要返回的 OLE 对象的属性名称。
propertyvalue OUTPUT
返回的属性值。 如果指定此参数,则必须是相应数据类型的局部变量。
如果该属性返回 OLE 对象, 则 propertyvalue 必须是数据类型 int 的局部变量。对象令牌存储在本地变量中,此对象令牌可用于其他 OLE 自动化存储过程。
如果属性返回单个值,则为以下任一值:
- 指定 propertyvalue 的局部变量,该变量返回局部变量中的属性值;或
- 不要指定 propertyvalue,它将属性值作为单列单行结果集返回给客户端。
当属性返回数组时,如果 指定了 propertyvalue ,则将其设置为 NULL
。
如果 指定了 propertyvalue ,但该属性未返回值,则会发生错误。 如果属性返回二维以上的数组,也将出现错误。
index
索引参数。 如果指定, 索引 必须是相应数据类型的值。
有些属性包含参数。 这些属性称为索引化属性,相应的参数被称为索引参数。 一个属性可有多个索引参数。
注意
此存储过程的参数按位置(而不是按名称)指定。
返回代码值
0
(success) 或非零数 (failure) 是 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. 使用局部变量
以下示例获取 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;