Share via


sp_OACreate (Transact-SQL)

Crea un'istanza di un oggetto OLE.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

sp_OACreate { progid | clsid } , objecttoken OUTPUT [ , context ] 

Argomenti

  • progid
    ProgID dell'oggetto OLE da creare. Questa stringa di caratteri descrive la classe dell'oggetto OLE. Il formato è il seguente: 'OLEComponent.Object'

    OLEComponent è il nome di componente del server di automazione OLE, mentre Object è il nome dell'oggetto OLE. L'oggetto OLE specificato deve essere un oggetto valido che supporta l'interfaccia IDispatch.

    SQLDMO.SQLServer, ad esempio, è il valore ProgID dell'oggetto SQL-DMO SQLServer. Il nome di componente di SQL-DMO è SQLDMO, l'oggetto SQLServer è valido e, come tutti gli oggetti SQL-DMO, l'oggetto SQLServer supporta l'interfaccia IDispatch.

  • clsid
    CLSID dell'oggetto OLE da creare. Questa stringa di caratteri descrive la classe dell'oggetto OLE. Il formato è il seguente: '{nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn}'. L'oggetto OLE specificato deve essere un oggetto valido che supporta l'interfaccia IDispatch.

    {00026BA1-0000-0000-C000-000000000046}, ad esempio, è il valore CLSID dell'oggetto SQL-DMO SQLServer.

  • objecttokenOUTPUT
    Token di oggetto restituito. Deve essere una variabile locale di tipo int. Questo token, che identifica l'oggetto OLE creato, viene utilizzato nelle chiamate alle altre stored procedure di automazione OLE.
  • context
    Specifica il contesto di esecuzione in cui viene eseguito il nuovo oggetto OLE. I possibili valori sono i seguenti:

    1 = Solo un server OLE in-process (dll).

    4 = Solo un server OLE locale (exe).

    5 = Sia un server OLE in-process sia un server OLE locale.

    Il valore predefinito, utilizzato quando questo parametro non viene specificato, è 5. Questo valore viene passato come parametro dwClsContext della chiamata a CoCreateInstance.

    Se è consentito l'utilizzo di un server OLE in-process, ovvero se è stato impostato il valore di contesto 1 o 5 oppure non è stato impostato alcun valore, il server ha accesso alla memoria e ad altre risorse di SQL Server. Un server OLE in-process può danneggiare la memoria o le risorse di SQL Server, con conseguenti risultati imprevisti, ad esempio un errore di violazione di accesso in SQL Server.

    Se si imposta il valore di contesto 4, un server OLE locale non ha accesso alle risorse di SQL Server e di conseguenza non può danneggiare né le risorse né la memoria di SQL Server.

    [!NOTA] I parametri di questa stored procedure vengono specificati in base alla posizione, non in base al nome.

Osservazioni

Quando le procedure di automazione OLE sono attivate, le chiamate a sp_OACreate avviano l'ambiente di esecuzione condiviso dell'automazione OLE. Per ulteriori informazioni sull'attivazione dell'automazione OLE, vedere Opzione Ole Automation Procedures.

L'oggetto OLE creato viene distrutto automaticamente al termine del batch di istruzioni Transact-SQL.

Autorizzazioni

È richiesta l'appartenenza al ruolo predefinito del server sysadmin.

Valori restituiti

0 (esito positivo) o un numero diverso da zero (esito negativo) corrispondente al valore integer del codice HRESULT restituito dall'oggetto di automazione OLE.

Per ulteriori informazioni sui codici restituiti HRESULT, vedere Codici restituiti e informazioni sugli errori di automazione OLE.

Esempi

A. Utilizzo di un valore ProgID

Nell'esempio seguente viene creato un oggetto SQL-DMO SQLServer tramite l'impostazione del valore ProgID corrispondente.

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. Utilizzo di un valore CLSID

Nell'esempio seguente viene creato un oggetto SQL-DMO SQLServer tramite l'impostazione del valore CLSID corrispondente.

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

Vedere anche

Riferimento

Stored procedure di automazione OLE (Transact-SQL)

Altre risorse

Opzione Ole Automation Procedures
Script di automazione OLE di esempio

Guida in linea e informazioni

Assistenza su SQL Server 2005