sp_OACreate (Transact-SQL)

Crea una instancia de un objeto OLE.

Icono de vínculo a temasConvenciones de sintaxis de Transact-SQL

Sintaxis

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

Argumentos

  • progid
    Es el identificador de programa (ProgID) del objeto OLE que se va a crear. Esta cadena de caracteres describe la clase del objeto OLE y tiene la siguiente forma: 'OLEComponent.Object'

    OLEComponent es el nombre del componente de servidor de Automatización OLE y Object es el nombre del objeto OLE. El objeto OLE especificado debe ser válido y debe ser compatible con la interfaz IDispatch.

    Por ejemplo, SQLDMO.SQLServer es el ProgID del objeto SQLServer de SQL-DMO. SQL-DMO tiene un nombre de componente de SQLDMO, el objeto SQLServer es válido y (al igual que todos los objetos de SQL-DMO) el objeto SQLServer es compatible con IDispatch.

  • clsid
    Es el identificador de clase (CLSID) del objeto OLE que se va a crear. Esta cadena de caracteres describe la clase del objeto OLE y tiene la siguiente forma: '{nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn}'. El objeto OLE especificado debe ser válido y debe ser compatible con la interfaz IDispatch.

    Por ejemplo, {00026BA1-0000-0000-C000-000000000046} es el CLSID del objeto SQLServer de SQL-DMO.

  • objecttokenOUTPUT
    Es el testigo del objeto devuelto y debe ser una variable local del tipo de datos int. Este testigo de objeto identifica el objeto OLE creado y se utiliza en llamadas a otros procedimientos almacenados de Automatización OLE.
  • context
    Especifica el contexto de ejecución en que se ejecuta el objeto OLE recién creado. Si se especifica, este valor debe ser uno de los siguientes:

    1 = sólo servidor OLE de proceso interno (.dll).

    4 = sólo servidor OLE local (.exe).

    5 = ambos servidores OLE, de proceso interno y local.

    Si no se especifica ningún valor, se utiliza el valor predeterminado 5. Este valor se pasa como el parámetro dwClsContext de la llamada a CoCreateInstance.

    Si se permite un servidor OLE de proceso interno (al utilizar un valor de contexto de 1 ó 5, o al no especificar un valor de contexto), tiene acceso a la memoria y a otros recursos que posea SQL Server. Un servidor OLE de proceso interno puede dañar la memoria o los recursos de SQL Server, y causar resultados imprevisibles, como una infracción de acceso a SQL Server.

    Cuando se especifica un valor de contexto de 4, un servidor OLE local no tiene acceso a ningún recurso de SQL Server y no puede dañar la memoria o los recursos de SQL Server.

    [!NOTA] Los parámetros para este procedimiento almacenado se especifican por la posición, no por el nombre.

Notas

Si se habilitan los procedimientos de automatización OLE, una llamada a sp_OACreate iniciará el entorno de ejecución compartido de Automatización OLE. Para obtener más información acerca de la automatización OLE, vea Ole Automation Procedures (opción).

El objeto OLE creado se destruye automáticamente al final del lote de instrucciones Transact-SQL.

Permisos

Debe pertenecer a la función fija de servidor sysadmin.

Valores de código de retorno

0 (correcto) o un valor distinto de cero (error) que es el valor entero del HRESULT devuelto por el objeto de Automatización OLE.

Para obtener más información acerca de los códigos de retorno HRESULT, vea Códigos de retorno e información de error de automatización OLE.

Ejemplos

A. Utilizar ProgID

En el siguiente ejemplo se crea un objeto SQLServer de SQL-DMO mediante su 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. Utilizar CLSID

En el siguiente ejemplo se crea un objeto SQLServer de SQL-DMO mediante su 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

Vea también

Referencia

Procedimientos almacenados de automatización OLE (Transact-SQL)

Otros recursos

Ole Automation Procedures (opción)
Ejemplo de secuencia de comandos de automatización OLE

Ayuda e información

Obtener ayuda sobre SQL Server 2005