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 4
har 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