sp_OACreate (Transact-SQL)

适用于:SQL Server

创建 OLE 对象的实例。

Transact-SQL 语法约定

语法

  
sp_OACreate { progid | clsid } , objecttoken OUTPUT [ , context ]   

参数

progid
要创建的 OLE 对象的编程标识符 (ProgID)。 此字符串描述 OLE 对象的类,其格式为“OLEComponent”。对象'

OLEComponent 是 OLE 自动化服务器的组件名称,Object 是 OLE 对象的名称。 指定的 OLE 对象必须有效,并且必须支持 IDispatch 接口。

例如,SQLDMO。SQLServer 是 SQL-DMO SQLServer 对象的 ProgID。 SQL-DMO 具有 SQLDMO 的组件名称,SQLServer 对象有效,SQLServer 对象支持 IDispatch(与所有 SQL-DMO 对象样)。

clsid
要创建的 OLE 对象的类标识符 (CLSID)。 此字符串描述 OLE 对象的类,其形式为“{nnnnnn-nnnn-nnnn-nnnn-nnnn-nn}”。 指定的 OLE 对象必须有效,并且必须支持 IDispatch 接口。

例如,{00026BA1-0000-0000-C000-0000000000046} 是 SQL-DMO SQLServer 对象的 CLSID。

objecttokenOUTPUT
返回的对象令牌,并且必须是数据类型 int 的局部变量。此对象令牌标识创建的 OLE 对象,并在调用其他 OLE 自动化存储过程时使用。

context
指定要运行新创建的 OLE 对象的执行上下文。 如果指定,则该值必须为下列值之一:

1 = 仅进程内 (.dll) OLE 服务器。

4 = 仅本地 (.exe) OLE 服务器。

5 = 进程内和本地 OLE 服务器都允许

如果未指定,则默认值为 5。 此值作为调用 CoCreateInstance 的 dwClsContext 参数传递。

如果允许进程内 OLE 服务器(通过使用上下文值 1 或 5未指定上下文值),则它有权访问 SQL Server 拥有的内存和其他资源。 进程内 OLE 服务器可能会损坏 SQL Server 内存或资源,并导致不可预知的结果,例如 SQL Server 访问冲突。

指定上下文值 4 时,本地 OLE 服务器无权访问任何 SQL Server 资源,并且它不能损坏 SQL Server 内存或资源。

注意

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

返回代码值

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

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

注解

如果启用了 OLE 自动化过程,则调用 sp_OACreate 将启动 OLE 自动化共享执行环境。 有关启用 OLE 自动化的详细信息,请参阅 Ole Automation Procedures Server 配置选项

创建的 OLE 对象在 Transact-SQL 语句批处理的末尾自动销毁。

权限

需要 sysadmin 固定服务器角色的成员身份或直接在此存储过程上执行权限。 Ole Automation Procedures 必须 启用 配置才能使用与 OLE 自动化相关的任何系统过程。

示例

A. 使用 ProgID

以下示例使用其 ProgID 创建 SQL-DMO SQLServer 对象。

DECLARE @object int;  
DECLARE @hr int;  
DECLARE @src varchar(255), @desc varchar(255);  
EXEC @hr = sp_OACreate 'SQLDMO.SQLServer', @object OUT;  
IF @hr <> 0  
BEGIN  
   EXEC sp_OAGetErrorInfo @object, @src OUT, @desc OUT   
   raiserror('Error Creating COM Component 0x%x, %s, %s',16,1, @hr, @src, @desc)  
    RETURN  
END;  
GO  

B. 使用 CLSID

以下示例使用其 CLSID 创建 SQL-DMO SQLServer 对象。

DECLARE @object int;  
DECLARE @hr int;  
DECLARE @src varchar(255), @desc varchar(255);  
EXEC @hr = sp_OACreate '{00026BA1-0000-0000-C000-000000000046}',  
    @object OUT;  
IF @hr <> 0  
BEGIN  
   EXEC sp_OAGetErrorInfo @object, @src OUT, @desc OUT   
   raiserror('Error Creating COM Component 0x%x, %s, %s',16,1, @hr, @src, @desc)  
    RETURN  
END;  
GO  

另请参阅

OLE 自动存储过程 (Transact-SQL)
Ole Automation Procedures 服务器配置选项
OLE 自动化脚本示例