Share via


sp_OACreate (Transact-SQL)

Crea una instancia de un objeto OLE.

Icono de vínculo a temas Convenciones 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.

  • objecttoken OUTPUT
    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 = solo servidor OLE de proceso interno (.dll).

    4 = solo 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 de configuración del servidor).

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

Permisos

Debe pertenecer al rol fijo 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

Vea también

Referencia

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

Ejemplo de script de automatización OLE

Conceptos

Ole Automation Procedures (opción de configuración del servidor)