sp_OACreate (Transact-SQL)

创建 OLE 对象的实例。

主题链接图标Transact-SQL 语法约定

语法

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

参数

  • progid
    要创建的 OLE 对象的编程标识符 (ProgID)。此字符串说明该 OLE 对象的类,其形式如下:'OLEComponent.Object'

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

    例如,SQLDMO.SQLServer 是 SQL-DMO SQLServer 对象的 ProgID。SQL-DMO 的组件名称为 SQLDMO,SQLServer 对象是有效的,并且同所有 SQL-DMO 对象一样,SQLServer 对象支持 IDispatch

  • clsid
    要创建的 OLE 对象的类标识符 (CLSID)。此字符串说明该 OLE 对象的类,其形式如下:'{nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn}'。指定的 OLE 对象必须有效并且必须支持 IDispatch 接口。

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

  • objecttokenOUTPUT
    返回的对象令牌,并且必须是数据类型为 int 的局部变量。该对象令牌用于标识所创建的 OLE 对象,并用于调用其他 OLE 自动化存储过程。
  • context
    指定要运行新创建的 OLE 对象的执行上下文。如果指定,则该值必须为下列值之一:

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

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

    5 = 同时允许使用进程内 OLE 服务器和本地 OLE 服务器。

    如果未指定,则默认值为 5。该值将作为调用 CoCreateInstancedwClsContext 参数传递。

    如果允许使用进程内 OLE 服务器(通过使用上下文值 15 或者不指定上下文值),则该服务器可以访问 SQL Server 拥有的内存和其他资源。进程内 OLE 服务器可能会破坏 SQL Server 的内存或资源并导致不可预知的结果,如 SQL Server 访问违规。

    当上下文值指定为 4 时,本地 OLE 服务器不能访问任何 SQL Server 资源,因而不能破坏 SQL Server 的内存或资源。

    ms189763.note(zh-cn,SQL.90).gif注意:
    此存储过程的参数按位置指定,而不是按名称指定。

返回代码值

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

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

备注

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

已创建的 OLE 对象在 Transact-SQL 语句批处理结束时会自动破坏。

权限

要求具有 sysadmin 固定服务器角色的成员身份。

示例

A. 使用 ProgID

以下示例通过使用 SQL-DMO SQLServer 对象的 ProgID 创建该对象。

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

以下示例通过使用 SQL-DMO SQLServer 对象的 CLSID 创建该对象。

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 自动化脚本示例

帮助和信息

获取 SQL Server 2005 帮助