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
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 el formato : 'OLEComponent.Objeto'

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 interfaz IDispatch .

Por ejemplo, SQLDMO. SQLServer es el ProgID del objeto SQL-DMO SQLServer . SQL-DMO tiene un nombre de componente de SQLDMO, el objeto SQLServer es válido y (como todos los objetos SQL-DMO) el objeto SQLServer admite 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 el formato : '{nnn-n-n-n-n}'. El objeto OLE especificado debe ser válido y debe admitir la interfaz IDispatch .

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

objecttokenOUTPUT
Es 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.

contextoo
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 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 1 o 5 o sin especificar un valor de contexto), tiene acceso a la memoria y a otros recursos propiedad de SQL Server. Un servidor OLE en proceso puede 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 valor distinto de cero (error) que es el valor entero del HRESULT devuelto por el objeto de OLE Automation.

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

Comentarios

Si se habilitan los procedimientos de OLE Automation, una llamada a sp_OACreate iniciará el entorno de ejecución compartido de OLE Automation. Para obtener más información sobre cómo habilitar la automatización OLE, vea Ole Automation Procedures Server Configuration Option.

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. Ole Automation Procedures la configuración debe estar habilitada para usar cualquier procedimiento del sistema relacionado con OLE Automation.

Ejemplos

A Utilizar 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 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 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 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  

Consulte también

Procedimientos almacenados de OLE Automation (Transact-SQL)
Ole Automation Procedures (opción de configuración del servidor)
Ejemplo de script de automatización OLE