Freigeben über


sp_OACreate (Transact-SQL)

Erstellt eine Instanz eines OLE-Objekts.

Themenlink (Symbol)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 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.

    HinweisHinweis

    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