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 la forma : '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 SQLServer de SQL-DMO. 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 la forma : '{nn-nn-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 SQLServer de SQL-DMO.
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 demás 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 = Tanto en proceso como en el servidor OLE local permitido
Si no se especifica, el valor predeterminado es 5. Este valor se pasa como 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 SQL Server memoria o recursos y provocar resultados impredecibles, como una infracción de acceso 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 SQL Server memoria o recursos.
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 e información de error de AUTOMATIZACIÓN OLE.
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
Comentarios
Enviar y ver comentarios de