Condividi tramite


sp_OACreate (Transact-SQL)

Si applica a: SQL Server

Crea un'istanza di un oggetto OLE.

Convenzioni relative alla sintassi Transact-SQL

Sintassi

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

Argomenti

progid

Identificatore programmatico (ProgID) dell'oggetto OLE da creare. Questa stringa di caratteri descrive la classe dell'oggetto OLE e ha il formato : <OLEComponent>.<Object>.

OLEComponent è il nome del componente del server di automazione OLE e Object è il nome dell'oggetto OLE. L'oggetto OLE specificato deve essere valido e deve supportare l'interfaccia IDispatch .

Ad esempio, SQLDMO.SQLServer è il ProgID dell'oggetto SQL-DMO SQLServer . SQL-DMO ha un nome di componente SQLDMO, l'oggetto SQLServer è valido e , come tutti gli oggetti SQL-DMO, l'oggetto SQLServer supporta IDispatch.

clsid

Identificatore di classe (CLSID) dell'oggetto OLE da creare. Questa stringa di caratteri descrive la classe dell'oggetto OLE e ha il formato : {<nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn>}. L'oggetto OLE specificato deve essere valido e deve supportare l'interfaccia IDispatch .

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

output objecttoken

Il token dell'oggetto restituito e deve essere una variabile locale di tipo di dati int. Questo token di oggetto identifica l'oggetto OLE creato e 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. Se specificato, questo valore deve essere una delle opzioni seguenti:

  • 1 = Solo server OLE in-process (.dll)
  • 4 = Solo server OLE locale (.exe)
  • 5 = Sia nel processo che nel server OLE locale consentito

Se non è specificato, il valore predefinito è 5. Questo valore viene passato come parametro dwClsContext della chiamata a CoCreateInstance.

Se un server OLE in-process è consentito (usando un valore di contesto pari 1 o 5 non specificando un valore di contesto), ha accesso alla memoria e ad altre risorse di proprietà di SQL Server. Un server OLE in-process potrebbe danneggiare la memoria o le risorse di SQL Server e causare risultati imprevedibili, ad esempio una violazione di accesso a SQL Server.

Quando si specifica un valore di contesto di 4, un server OLE locale non ha accesso ad alcuna risorsa di SQL Server e non può danneggiare la memoria o le risorse di SQL Server.

Nota

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

Valori del codice restituito

0 (esito positivo) o un numero diverso da zero (errore) che corrisponde al valore intero dell'oggetto HRESULT restituito dall'oggetto automazione OLE.

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

Osservazioni:

Se le procedure di automazione OLE sono abilitate, viene avviata una chiamata per sp_OACreate avviare l'ambiente di esecuzione condiviso di automazione OLE. Per altre informazioni sull'abilitazione dell'automazione OLE, vedere Ole Automation Procedures (opzione di configurazione del server).

L'oggetto OLE creato viene eliminato automaticamente alla fine del batch di istruzioni Transact-SQL.

Autorizzazioni

È richiesta l'appartenenza al ruolo predefinito del server sysadmin o l'autorizzazione di esecuzione direttamente in questa stored procedure. L'opzione di configurazione del server Ole Automation Procedures deve essere abilitata per utilizzare qualsiasi procedura di sistema correlata all'automazione OLE.

Esempi

R. Usare ProgID

Nell'esempio seguente viene creato un oggetto SQL-DMO SQLServer usando il relativo 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. Usare CLSID

Nell'esempio seguente viene creato un oggetto SQL-DMO SQLServer usando il relativo 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