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 token del objeto devuelto y debe ser una variable local del tipo de datos int. Este token 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.

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.

Comentarios

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.

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