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
Der programmtechnische Bezeichner (ProgID, Programmatic Identifier) des zu erstellenden OLE-Objekts. Diese Zeichenfolge beschreibt die Klasse des OLE-Objekts und weist das Format "OLEComponent" auf.Objekt'
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.
Beispiel: SQLDMO. SQLServer ist die ProgID des SQL-DMO SQLServer-Objekts . 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
Die Klassen-ID (CLSID, Class Identifier) des zu erstellenden OLE-Objekts. Diese Zeichenfolge beschreibt die Klasse des OLE-Objekts und weist die Form '{nn-n-n-n-n-n}' auf. Das angegebene OLE-Objekt muss gültig sein und muss die IDispatch-Schnittstelle unterstützen.
Beispielsweise ist {00026BA1-0000-0000-C000-0000000046} die CLSID des SQL-DMO SQLServer-Objekts .
objecttoken OUTPUT
Ist 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 context angegeben wird, ist einer der folgenden Werte möglich:
1 = Nur In-Process-OLE-Server (.dll).
4 = Nur lokaler OLE-Server (.exe).
5 = Sowohl in prozessinterner als auch lokaler OLE-Server zulässig
Wenn nicht angegeben, ist der Standardwert 5. Dieser Wert wird als dwClsContext-Parameter des Aufrufs von CoCreateInstance übergeben.
Wenn ein inprozessbasierter OLE-Server zulässig ist (mit einem Kontextwert von 1 oder 5 oder nicht durch Angeben eines Kontextwerts), hat er Zugriff auf Arbeitsspeicher und andere Ressourcen, die sql Server besitzen. Ein prozessinterner OLE-Server kann SQL Server-Speicher oder -Ressourcen beschädigen und unvorhersehbare Ergebnisse verursachen, z. B. eine SQL Server-Zugriffsverletzung.
Wenn Sie einen Kontextwert von 4 angeben, 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 Zahl ungleich Null (Fehler), die dem ganzzahligen Wert von HRESULT entspricht, der vom OLE-Automatisierungsobjekt zurückgegeben wird.
Weitere Informationen zu HRESULT-Rückgabecodes finden Sie unter OLE Automation Return Codes and Error Information.
Hinweise
Wenn OLE-Automatisierungsprozeduren aktiviert sind, startet ein Aufruf von sp_OACreate die gemeinsam genutzte OLE-Automatisierungsausführungsumgebung. Weitere Informationen zum Aktivieren der OLE-Automatisierung finden Sie unter Ole Automation Procedures Server Configuration Option.
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ührt die Berechtigung direkt für diese gespeicherte Prozedur aus. Ole Automation Procedures
Die Konfiguration muss aktiviert sein, um alle Systemprozeduren im Zusammenhang mit der OLE-Automatisierung zu verwenden.
Beispiele
A. Verwenden der ProgID
Im folgenden Beispiel wird mithilfe der ProgID ein SQL-DMO SQLServer-Objekt erstellt.
DECLARE @object int;
DECLARE @hr int;
DECLARE @src varchar(255), @desc varchar(255);
EXEC @hr = sp_OACreate 'SQLDMO.SQLServer', @object OUT;
IF @hr <> 0
BEGIN
EXEC sp_OAGetErrorInfo @object, @src OUT, @desc OUT
raiserror('Error Creating COM Component 0x%x, %s, %s',16,1, @hr, @src, @desc)
RETURN
END;
GO
B. Verwenden der CLSID
Im folgenden Beispiel wird ein SQL-DMO SQLServer-Objekt 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 OUT;
IF @hr <> 0
BEGIN
EXEC sp_OAGetErrorInfo @object, @src OUT, @desc OUT
raiserror('Error Creating COM Component 0x%x, %s, %s',16,1, @hr, @src, @desc)
RETURN
END;
GO
Weitere Informationen
Gespeicherte OLE-Automatisierungsprozeduren (Transact-SQL)
OLE-Automatisierungsprozeduren (Serverkonfigurationsoption)
OLE-Automatisierungsbeispielskript