Delen via


sp_OACreate (Transact-SQL)

van toepassing op:SQL Server-

Hiermee maakt u een exemplaar van een OLE-object.

Transact-SQL syntaxisconventies

Syntaxis

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

Argumenten

Belangrijk

Argumenten voor uitgebreide opgeslagen procedures moeten worden ingevoerd in de specifieke volgorde, zoals beschreven in de sectie Syntaxis. Als de parameters niet in de volgorde zijn ingevoerd, treedt er een foutbericht op.

De programmatische id (ProgID) van het OLE-object dat moet worden gemaakt. Deze tekenreeks beschrijft de klasse van het OLE-object en heeft de vorm: <OLEComponent>.<Object>.

OLEComponent is de onderdeelnaam van de OLE Automation-server en Object de naam van het OLE-object is. Het opgegeven OLE-object moet geldig zijn en moet de IDispatch-interface ondersteunen.

SQLDMO.SQLServer is bijvoorbeeld de ProgID van het SQL-DMO SQLServer-object. SQL-DMO een onderdeelnaam van SQLDMO heeft, is het SQLServer-object geldig en (zoals alle SQL-DMO objecten) ondersteunt het SQLServer object IDispatch.

clsid-

De klasse-id (CLSID) van het OLE-object dat moet worden gemaakt. Deze tekenreeks beschrijft de klasse van het OLE-object en heeft de vorm: {<nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn>}. Het opgegeven OLE-object moet geldig zijn en moet de IDispatch-interface ondersteunen.

{00026BA1-0000-0000-C000-000000000046} is bijvoorbeeld de CLSID van het SQL-DMO SQLServer-object.

objecttoken OUTPUT

Het geretourneerde objecttoken en moet een lokale variabele van het gegevenstype intzijn. Dit objecttoken identificeert het gemaakte OLE-object en wordt gebruikt in aanroepen naar de andere opgeslagen OLE Automation-procedures.

context

Hiermee geeft u de uitvoeringscontext op waarin het zojuist gemaakte OLE-object wordt uitgevoerd. Indien opgegeven, moet deze waarde een van de volgende opties zijn:

  • alleen 1 = In-process (.dll) OLE-server
  • 4 = Alleen OLE-server (.exe)
  • 5 = Zowel in-process als lokale OLE-server toegestaan

Als deze niet is opgegeven, wordt de standaardwaarde 5. Deze waarde wordt doorgegeven als de parameter dwClsContext van de aanroep naar CoCreateInstance.

Als een IN-process OLE-server is toegestaan (met behulp van een contextwaarde van 1 of 5 of door geen contextwaarde op te geven), heeft deze toegang tot geheugen en andere resources die eigendom zijn van SQL Server. Een in-process OLE-server kan het geheugen of de resources van SQL Server beschadigen en onvoorspelbare resultaten veroorzaken, zoals een schending van de toegang tot SQL Server.

Wanneer u een contextwaarde van 4opgeeft, heeft een lokale OLE-server geen toegang tot SQL Server-resources en kan het SQL Server-geheugen of -resources niet beschadigen.

Notitie

De parameters voor deze opgeslagen procedure worden opgegeven op positie, niet op naam.

Codewaarden retourneren

0 (geslaagd) of een niet-nulnummer (fout) dat de gehele waarde is van het HRESULT dat wordt geretourneerd door het OLE Automation-object.

Zie OLE Automation-retourcodes en foutinformatievoor meer informatie over HRESULT-retourcodes.

Opmerkingen

Als OLE-automatiseringsprocedures zijn ingeschakeld, wordt een aanroep van sp_OACreate de gedeelde OLE Automation-uitvoeringsomgeving gestart. Zie Ole Automation-procedures (serverconfiguratieoptie)voor meer informatie over het inschakelen van OLE-automatisering.

Het gemaakte OLE-object wordt automatisch vernietigd aan het einde van de Transact-SQL instructiebatch.

Machtigingen

Vereist lidmaatschap van de sysadmin vaste serverfunctie of voer de machtiging rechtstreeks uit voor deze opgeslagen procedure. De Ole Automation-procedures serverconfiguratieoptie moet zijn ingeschakeld voor het gebruik van een systeemprocedure met betrekking tot OLE Automation.

Voorbeelden

Een. ProgID gebruiken

In het volgende voorbeeld wordt een SQL-DMO SQLServer-object gemaakt met behulp van de 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. CLSID gebruiken

In het volgende voorbeeld wordt een SQL-DMO SQLServer-object gemaakt met behulp van de 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