Freigeben über


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

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