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 4
opgeeft, 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