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

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 5 ou não especificando um valor de 1 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