sp_OACreate (Transact-SQL)
Gilt für: SQL Server
Erstellt eine Instanz eines OLE-Objekts.
Transact-SQL-Syntaxkonventionen
Syntax
sp_OACreate { progid | clsid }
, objecttoken OUTPUT
[ , context ]
[ ; ]
Argumente
progid
Die programmgesteuerte ID (ProgID) des zu erstellenden OLE-Objekts. Diese Zeichenfolge beschreibt die Klasse des OLE-Objekts und weist das Format auf: <OLEComponent>.<Object>
.
OLEComponent ist der Komponentenname des OLE-Automatisierungsservers, und Object ist der Name des OLE-Objekts. Das angegebene OLE-Objekt muss gültig sein und muss die IDispatch
Schnittstelle unterstützen.
Ist beispielsweise SQLDMO.SQLServer
die ProgID des SQL-DMO-Objekts SQLServer
. SQL-DMO verfügt über einen Komponentennamen von SQLDMO, das SQLServer
Objekt ist gültig, und (wie alle SQL-DMO-Objekte) unterstützt das SQLServer
Objekt IDispatch
.
clsid
Der Klassenbezeichner (CLSID) des zu erstellenden OLE-Objekts. Diese Zeichenfolge beschreibt die Klasse des OLE-Objekts und weist das Format auf: {<nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn>}
. Das angegebene OLE-Objekt muss gültig sein und muss die IDispatch
Schnittstelle unterstützen.
Ist beispielsweise {00026BA1-0000-0000-C000-000000000046}
die CLSID des SQL-DMO-Objekts SQLServer
.
objecttoken OUTPUT
Das zurückgegebene Objekttoken und muss eine lokale Variable des Datentyps int sein. Dieses Objekttoken identifiziert das erstellte OLE-Objekt und wird in Aufrufen der anderen gespeicherten OLE-Automatisierungsprozeduren verwendet.
context
Gibt den Ausführungskontext an, in dem das neu erstellte OLE-Objekt ausgeführt wird. Wenn angegeben, muss dieser Wert eine der folgenden Optionen sein:
1
= Nur IN-Process (.dll
) OLE-Server4
= Nur lokaler (.exe
) OLE-Server5
= Sowohl in prozessinterner als auch lokaler OLE-Server zulässig
Wenn Sie hier nichts angeben, lautet der Standardwert 5
. Dieser Wert wird als dwClsContext-Parameter des Aufrufs CoCreateInstance
übergeben.
Wenn ein inprozessbasierter OLE-Server zulässig ist (mithilfe eines Kontextwerts oder 1
5
durch Angabe eines Kontextwerts), hat er Zugriff auf Arbeitsspeicher und andere Ressourcen, die sql Server besitzt. Ein prozessinterner OLE-Server kann SQL Server-Speicher oder -Ressourcen beschädigen und unvorhersehbare Ergebnisse verursachen, z. B. einen SQL Server-Zugriffsverstoß.
Wenn Sie einen Kontextwert angeben 4
, hat ein lokaler OLE-Server keinen Zugriff auf SQL Server-Ressourcen, und sql Server-Speicher oder -Ressourcen können nicht beschädigt werden.
Hinweis
Die Parameter für diese gespeicherte Prozedur werden nicht nach dem Namen, sondern nach der Position angegeben.
Rückgabecodewerte
0
(Erfolg) oder eine Nichtzeronummer (Fehler), die den ganzzahligen Wert des vom OLE-Automatisierungsobjekt zurückgegebenen HRESULT-Werts darstellt.
Weitere Informationen zu HRESULT-Rückgabecodes finden Sie unter OLE-Automatisierungsrücklaufcodes und Fehlerinformationen.
Hinweise
Wenn OLE-Automatisierungsprozeduren aktiviert sind, startet ein Aufruf zum sp_OACreate
Starten der freigegebenen OLE-Automatisierungsausführungsumgebung. Weitere Informationen zum Aktivieren der OLE-Automatisierung finden Sie unter Ole Automation Procedures (Serverkonfigurationsoption).
Das erstellte OLE-Objekt wird automatisch am Ende des Transact-SQL-Anweisungsbatches zerstört.
Berechtigungen
Erfordert die Mitgliedschaft in der festen Serverrolle "sysadmin ", oder führen Sie die Berechtigung direkt für diese gespeicherte Prozedur aus. Die Serverkonfigurationsoption "Ole Automation Procedures " muss aktiviert sein, um alle Systemprozeduren im Zusammenhang mit der OLE-Automatisierung zu verwenden.
Beispiele
A. ProgID verwenden
Im folgenden Beispiel wird mithilfe der ProgID ein SQL-DMO-Objekt SQLServer
erstellt.
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. Verwenden von CLSID
Im folgenden Beispiel wird ein SQL-DMO-Objekt SQLServer
mithilfe der CLSID erstellt.
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