sp_OACreate (Transact-SQL)
Erstellt eine Instanz eines OLE-Objekts.
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 folgende Format auf: 'OLEComponent.Object'.OLEComponent ist der Komponentenname des OLE-Automatisierungsservers, Object ist der Name des OLE-Objekts. Das angegebene OLE-Objekt muss gültig sein und die IDispatch-Schnittstelle unterstützen.
SQLDMO.SQLServer ist beispielsweise der ProgID-Wert des SQL-DMO-SQLServer-Objekts. SQL-DMO besitzt den Komponentennamen SQLDMO, das SQLServer-Objekt ist gültig, und das SQLServer-Objekt unterstützt IDispatch (wie alle SQL-DMO-Objekte).
clsid
Die Klassen-ID (CLSID, Class Identifier) des zu erstellenden OLE-Objekts. Diese Zeichenfolge beschreibt die Klasse des OLE-Objekts und weist das folgende Format auf: '{nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn}'. Das angegebene OLE-Objekt muss gültig sein und die IDispatch-Schnittstelle unterstützen.Beispielsweise ist {00026BA1-0000-0000-C000-000000000046} der CLSID-Wert des SQL-DMO-SQLServer-Objekts.
objecttokenOUTPUT
Das zurückgegebene Objekttoken. Dabei muss es sich um eine lokale Variable vom Datentyp int handeln. Dieses Objekttoken identifiziert das erstellte OLE-Objekt und wird beim Aufruf von anderen gespeicherten Prozeduren der OLE-Automatisierung benötigt.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-Process-OLE-Server als auch lokaler OLE-Server zulässig.
Wenn dieser Wert fehlt, wird der Standardwert 5 verwendet. Dieser Wert wird als dwClsContext-Parameter des Aufrufs an CoCreateInstance übergeben.
Wenn ein In-Process-OLE-Server zugelassen ist (indem als Kontextwert 1 oder 5 verwendet wird oder kein Kontextwert angegeben ist), hat dieser Server Zugriff auf den Speicher und andere Ressourcen von SQL Server. Ein In-Process-OLE-Server kann den Speicher und die Ressourcen von SQL Server beschädigen und unvorhersehbare Ergebnisse verursachen, wie z. B. eine SQL Server-Zugriffsverletzung.
Wenn Sie als Kontextwert 4 angeben, hat ein lokaler OLE-Server keinen Zugriff auf SQL Server-Ressourcen und kann weder Speicher noch Ressourcen von SQL Server beschädigen.
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 Rückgabecodes und Fehlerinformationen der OLE-Automatisierung.
Hinweise
Wenn OLE-Automatisierungsprozeduren aktiviert sind, wird durch den Aufruf von sp_OACreate die freigegebene Ausführungsumgebung der OLE-Automatisierung gestartet. Weitere Informationen zum Aktivieren der OLE-Automatisierung finden Sie unter Ole Automation Procedures (Option).
Das erstellte OLE-Objekt wird automatisch am Ende des Transact-SQL-Anweisungsbatches zerstört.
Berechtigungen
Erfordert die Mitgliedschaft in der festen Serverrolle sysadmin.
Beispiele
A. Verwenden von ProgID
Im folgenden Beispiel wird das SQL-DMO-SQLServer-Objekt mithilfe seines ProgID-Wertes 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 von CLSID
Im folgenden Beispiel wird das SQL-DMO-SQLServer-Objekt mithilfe seines CLSID-Wertes 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