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 .

objecttokenOUTPUT
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 (.dll) OLE-Server.

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 ProceduresDie 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