Compartir por


sp_OACreate (Transact-SQL)

Se aplica a: SQL Server

Crea una instancia de un objeto OLE.

Convenciones de sintaxis de Transact-SQL

Sintaxis

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

Argumentos

progid

Identificador de programación (ProgID) del objeto OLE que se va a crear. Esta cadena de caracteres describe la clase del objeto OLE y tiene la forma : <OLEComponent>.<Object>.

OLEComponent es el nombre del componente de servidor de OLE Automation y Object es el nombre del objeto OLE. El objeto OLE especificado debe ser válido y debe admitir la IDispatch interfaz .

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

clsid

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 forma : {<nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn>}. El objeto OLE especificado debe ser válido y debe admitir la IDispatch interfaz .

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

objecttoken OUTPUT

El token de objeto devuelto y debe ser una variable local de tipo de datos int. Este token de objeto identifica el objeto OLE creado y se usa en llamadas a los otros procedimientos almacenados de OLE Automation.

contexto

Especifica el contexto de ejecución en que se ejecuta el objeto OLE recién creado. Si se especifica, este valor debe ser una de las siguientes opciones:

  • 1 = Solo servidor OLE en proceso (.dll)
  • 4 = Solo servidor OLE local (.exe)
  • 5 = Servidor OLE local y en proceso permitido

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

Si se permite un servidor OLE en proceso (mediante un valor de contexto de o 5 no especificando un valor de 1 contexto), tiene acceso a la memoria y a otros recursos propiedad de SQL Server. Un servidor OLE en proceso podría dañar la memoria o los recursos de SQL Server y provocar resultados imprevisibles, como una infracción de acceso de 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 número distinto de cero (error) que es el valor entero del HRESULT devuelto por el objeto OLE Automation.

Para obtener más información sobre los códigos de retorno HRESULT, consulte Códigos de retorno y información de error de automatización OLE.

Comentarios

Si los procedimientos de automatización OLE están habilitados, una llamada a inicia sp_OACreate el entorno de ejecución compartida de OLE Automation. Para obtener más información sobre cómo habilitar la automatización OLE, consulte Procedimientos de automatización ole (opción de configuración del servidor) .

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

Permisos

Requiere la pertenencia al rol fijo de servidor sysadmin o ejecutar el permiso directamente en este procedimiento almacenado. La opción de configuración del servidor Procedimientos de Ole Automation debe estar habilitada para usar cualquier procedimiento del sistema relacionado con OLE Automation.

Ejemplos

A Uso de ProgID

En el ejemplo siguiente se crea un objeto SQL-DMO SQLServer mediante su ProgID.

DECLARE @object INT;
DECLARE @hr INT;
DECLARE @src VARCHAR(255),
    @desc VARCHAR(255);

EXEC @hr = sp_OACreate 'SQLDMO.SQLServer',
    @object OUTPUT;

IF @hr <> 0
BEGIN
    EXEC sp_OAGetErrorInfo @object,
        @src OUTPUT,
        @desc OUTPUT

    RAISERROR ('Error Creating COM Component 0x%x, %s, %s', 16, 1, @hr, @src, @desc);

    RETURN
END;
GO

B. Uso de CLSID

En el ejemplo siguiente se crea un objeto SQL-DMO SQLServer 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 OUTPUT;

IF @hr <> 0
BEGIN
    EXEC sp_OAGetErrorInfo @object,
        @src OUTPUT,
        @desc OUTPUT

    RAISERROR ('Error Creating COM Component 0x%x, %s, %s', 16, 1, @hr, @src, @desc);

    RETURN
END;
GO