Teilen ü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

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 1 5 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