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