sp_OACreate (Transact-SQL)
Aplica-se:SQL Server
Cria uma instância de um objeto OLE.
Convenções de sintaxe de Transact-SQL
Sintaxe
sp_OACreate { progid | clsid }
, objecttoken OUTPUT
[ , context ]
[ ; ]
Argumentos
Importante
Os argumentos para procedimentos armazenados estendidos devem ser inseridos na ordem específica, conforme descrito na seção sintaxe. Se os parâmetros forem inseridos fora de ordem, ocorrerá uma mensagem de erro.
progid
O identificador programático (ProgID) do objeto OLE a ser criado. Essa cadeia de caracteres descreve a classe do objeto OLE e tem o formato: <OLEComponent>.<Object>
.
OLEComponent é o nome do componente do servidor de Automação OLE e Object é o nome do objeto OLE. O objeto OLE especificado deve ser válido e deve dar suporte à IDispatch
interface.
Por exemplo, SQLDMO.SQLServer
é o ProgID do objeto SQL-DMO SQLServer
. O SQL-DMO tem um nome de componente SQLDMO, o SQLServer
objeto é válido e (como todos os objetos SQL-DMO) o SQLServer
objeto suporta IDispatch
.
clsid
O CLSID (identificador de classe) do objeto OLE a ser criado. Essa cadeia de caracteres descreve a classe do objeto OLE e tem o formato: {<nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn>}
. O objeto OLE especificado deve ser válido e deve dar suporte à IDispatch
interface.
Por exemplo, {00026BA1-0000-0000-C000-000000000046}
é o CLSID do objeto SQL-DMO SQLServer
.
objecttoken SAÍDA
O token de objeto retornado e deve ser uma variável local do tipo de dados int. Esse token de objeto identifica o objeto OLE criado e é usado em chamadas para os outros procedimentos armazenados de Automação OLE.
contexto
Especifica o contexto de execução no qual o objeto OLE recém-criado é executado. Se especificado, esse valor deve ser uma das seguintes opções:
-
1
= Somente servidor OLE em processo (.dll
) -
4
= Somente servidor OLE local (.exe
) -
5
= Servidor OLE em processo e local permitido
Se esse campo não for especificado, o valor padrão será 5
. Esse valor é passado como o parâmetro dwClsContext da chamada para CoCreateInstance
.
Se um servidor OLE em processo for permitido (usando um valor de contexto de ou 1
ou não especificando um valor de 5
contexto), ele terá acesso à memória e a outros recursos pertencentes ao SQL Server. Um servidor OLE em processo pode danificar a memória ou os recursos do SQL Server e causar resultados imprevisíveis, como uma violação de acesso do SQL Server.
Quando você especifica um valor de contexto de 4
, um servidor OLE local não tem acesso a nenhum recurso do SQL Server e não pode danificar a memória ou os recursos do SQL Server.
Observação
Os parâmetros deste procedimento armazenado são especificados por posição, e não por nome.
Valores do código de retorno
0
(sucesso) ou um número diferente de zero (falha) que é o valor inteiro do HRESULT retornado pelo objeto de Automação OLE.
Para obter mais informações sobre códigos de retorno HRESULT, consulte Códigos de retorno de automação OLE e informações de erro.
Comentários
Se os procedimentos de automação OLE estiverem habilitados, uma chamada para sp_OACreate
iniciar o ambiente de execução compartilhada da Automação OLE. Para obter mais informações sobre como habilitar a automação OLE, consulte Procedimentos de automação OLE (opção de configuração do servidor).
O objeto OLE criado é destruído automaticamente no final do lote de instruções Transact-SQL.
Permissões
Requer associação na função de servidor fixa sysadmin ou permissão de execução diretamente nesse procedimento armazenado. A opção de configuração do servidor Ole Automation Procedures deve ser habilitada para usar qualquer procedimento do sistema relacionado ao OLE Automation.
Exemplos
R. Usar ProgID
O exemplo a seguir cria um objeto SQL-DMO SQLServer
usando seu 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. Usar CLSID
O exemplo a seguir cria um objeto SQL-DMO SQLServer
usando seu 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