Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:SQL Server
Erstellt eine Instanz eines OLE-Objekts.
Transact-SQL-Syntaxkonventionen
Syntax
sp_OACreate { progid | clsid }
, objecttoken OUTPUT
[ , context ]
[ ; ]
Argumente
Wichtig
Argumente für erweiterte gespeicherte Prozeduren müssen in der spezifischen Reihenfolge eingegeben werden, wie im Abschnitt Syntax beschrieben. Wenn die Parameter außerhalb der Reihenfolge eingegeben werden, tritt eine Fehlermeldung auf.
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-Server -
4
= Nur lokaler (.exe
) OLE-Server -
5
= 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