Dela via


sp_OACreate (Transact-SQL)

gäller för:SQL Server

Skapar en instans av ett OLE-objekt.

Transact-SQL syntaxkonventioner

Syntax

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

Argument

Viktig

Argument för utökade lagrade procedurer måste anges i den specifika ordning som beskrivs i avsnittet Syntax. Om parametrarna anges i fel ordning visas ett felmeddelande.

Den programmatiska identifieraren (ProgID) för OLE-objektet som ska skapas. Den här teckensträngen beskriver klassen för OLE-objektet och har formuläret: <OLEComponent>.<Object>.

OLEComponent är komponentnamnet på OLE Automation-servern och Object är namnet på OLE-objektet. Det angivna OLE-objektet måste vara giltigt och måste ha stöd för IDispatch-gränssnittet.

SQLDMO.SQLServer är till exempel ProgID för SQL-DMO SQLServer-objektet. SQL-DMO har komponentnamnet SQLDMO är SQLServer-objektet giltigt och (som alla SQL-DMO objekt) stöder SQLServer-objektet IDispatch.

clsid

Klassidentifieraren (CLSID) för OLE-objektet som ska skapas. Den här teckensträngen beskriver klassen för OLE-objektet och har formuläret: {<nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn>}. Det angivna OLE-objektet måste vara giltigt och måste ha stöd för IDispatch-gränssnittet.

Till exempel är {00026BA1-0000-0000-C000-000000000046} CLSID för SQL-DMO SQLServer-objektet.

objecttoken OUTPUT

Den returnerade objekttoken och måste vara en lokal variabel av datatypen int. Den här objekttoken identifierar det skapade OLE-objektet och används i anrop till andra OLE Automation-lagrade procedurer.

kontext

Anger körningskontexten där det nyligen skapade OLE-objektet körs. Om det här värdet anges måste det vara något av följande alternativ:

  • 1 = In-process ( endast.dll) OLE-server
  • 4 = Endast lokal (.exe) OLE-server
  • 5 = Både processbaserad och lokal OLE-server tillåts

Om det inte anges är standardvärdet 5. Det här värdet skickas som parametern dwClsContext för anropet till CoCreateInstance.

Om en processbaserad OLE-server tillåts (med hjälp av ett kontextvärde för 1 eller 5 eller genom att inte ange ett kontextvärde) har den åtkomst till minne och andra resurser som ägs av SQL Server. En processbaserad OLE-server kan skada SQL Server-minne eller resurser och orsaka oförutsägbara resultat, till exempel en överträdelse av SQL Server-åtkomst.

När du anger ett kontextvärde för 4har en lokal OLE-server inte åtkomst till några SQL Server-resurser och det kan inte skada SQL Server-minne eller resurser.

Not

Parametrarna för den här lagrade proceduren anges efter position, inte efter namn.

Returnera kodvärden

0 (lyckades) eller ett icke-nolltal (fel) som är heltalsvärdet för HRESULT som returneras av OLE Automation-objektet.

Mer information om HRESULT-returkoder finns i RETURkoder för OLE Automation och felinformation.

Anmärkningar

Om OLE-automatiseringsprocedurer är aktiverade startar ett anrop till sp_OACreate den delade körningsmiljön för OLE Automation. Mer information om hur du aktiverar OLE-automatisering finns i Ole Automation-procedurer (serverkonfigurationsalternativ).

Det skapade OLE-objektet förstörs automatiskt i slutet av batchen Transact-SQL-instruktion.

Behörigheter

Kräver medlemskap i sysadmin fast serverroll eller kör behörighet direkt på den här lagrade proceduren. Alternativet Ole Automation-procedurer serverkonfiguration måste vara aktiverat för att kunna använda alla systemprocedurer som är relaterade till OLE Automation.

Exempel

A. Använda ProgID

I följande exempel skapas ett SQL-DMO SQLServer objekt med hjälp av dess 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. Använda CLSID

I följande exempel skapas ett SQL-DMO SQLServer objekt med hjälp av dess 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