Sdílet prostřednictvím


sp_OACreate (Transact-SQL)

platí pro:SQL Server

Vytvoří instanci objektu OLE.

Transact-SQL konvence syntaxe

Syntax

sp_OACreate { progid | clsid }
    , objecttoken OUTPUT
    [ , context ]
[ ; ]

Argumenty

Důležitý

Argumenty rozšířených uložených procedur musí být zadány v určitém pořadí, jak je popsáno v části Syntaxe. Pokud jsou parametry zadány mimo pořadí, dojde k chybové zprávě.

Programový identifikátor (ProgID) objektu OLE, který se má vytvořit. Tento řetězec znaků popisuje třídu objektu OLE a má tvar: <OLEComponent>.<Object>.

oleComponent je název komponenty serveru OLE Automation a Objekt je název objektu OLE. Zadaný objekt OLE musí být platný a musí podporovat IDispatch rozhraní.

Například SQLDMO.SQLServer je ProgID objektu SQL-DMO SQLServer. SQL-DMO má název komponenty SQLDMO, objekt SQLServer je platný a (podobně jako všechny SQL-DMO objekty) SQLServer objekt podporuje IDispatch.

clsid

Identifikátor třídy (CLSID) objektu OLE, který se má vytvořit. Tento řetězec znaků popisuje třídu objektu OLE a má tvar: {<nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn>}. Zadaný objekt OLE musí být platný a musí podporovat IDispatch rozhraní.

Například {00026BA1-0000-0000-C000-000000000046} je CLSID objektu SQL-DMO SQLServer.

objecttoken OUTPUT

Vrácený token objektu a musí být místní proměnnou datového typu int. Tento token objektu identifikuje vytvořený objekt OLE a používá se při volání ostatních uložených procedur automatizace OLE.

kontextové

Určuje kontext spuštění, ve kterém se nově vytvořený objekt OLE spouští. Pokud je tato hodnota zadaná, musí být jedna z následujících možností:

  • 1 = pouze server OLE v procesu (.dll)
  • 4 = pouze místní (.exe) server OLE
  • 5 = povolený místní i místní server OLE

Pokud není zadána, výchozí hodnota je 5. Tato hodnota se předává jako dwClsContext parametr volání CoCreateInstance.

Pokud je povolený procesový server OLE (pomocí kontextové hodnoty 1 nebo 5 nebo nezadání kontextové hodnoty), má přístup k paměti a dalším prostředkům vlastněným SQL Serverem. Procesový server OLE může poškodit paměť nebo prostředky SQL Serveru a způsobit nepředvídatelné výsledky, například narušení přístupu k SQL Serveru.

Když zadáte kontextovou hodnotu 4, místní server OLE nemá přístup k žádným prostředkům SQL Serveru a nemůže poškodit paměť nebo prostředky SYSTÉMU SQL Server.

Poznámka

Parametry pro tuto uloženou proceduru jsou určeny podle pozice, nikoli podle názvu.

Návratové hodnoty kódu

0 (úspěch) nebo nenulové číslo (selhání), které je celočíselná hodnota HRESULT vrácená objektem AUTOMATIZACE OLE.

Další informace o návratových kódech HRESULT najdete v tématu návratové kódy automatizace OLE a informace o chybách.

Poznámky

Pokud jsou povolené procedury automatizace OLE, spustí volání sp_OACreate spustí prostředí sdíleného spouštění automatizace OLE. Další informace o povolení automatizace OLE naleznete v tématu Ole Automation Procedur (možnost konfigurace serveru).

Vytvořený objekt OLE se automaticky zničí na konci dávky příkazu Transact-SQL.

Dovolení

Vyžaduje členství v správce systému pevné role serveru nebo spustit oprávnění přímo v této uložené proceduře. Možnost konfigurace procedur Ole Automation serveru musí být povolena, aby bylo možné použít jakýkoli systémový postup související se službou OLE Automation.

Příklady

A. Použití IDENTIFIKÁTORu ProgID

Následující příklad vytvoří objekt SQL-DMO SQLServer pomocí jeho ProgID.

DECLARE @object AS INT;
DECLARE @hr AS INT;
DECLARE @src AS VARCHAR (255);
DECLARE @desc AS VARCHAR (255);

EXECUTE
    @hr = sp_OACreate 'SQLDMO.SQLServer',
    @object OUTPUT;

IF @hr <> 0
BEGIN
    EXECUTE 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. Použití CLSID

Následující příklad vytvoří objekt SQL-DMO SQLServer pomocí jeho CLSID.

DECLARE @object AS INT;
DECLARE @hr AS INT;
DECLARE @src AS VARCHAR (255);
DECLARE @desc AS VARCHAR (255);

EXECUTE
    @hr = sp_OACreate '{00026BA1-0000-0000-C000-000000000046}',
    @object OUTPUT;

IF @hr <> 0
BEGIN
    EXECUTE sp_OAGetErrorInfo
        @object,
        @src OUTPUT,
        @desc OUTPUT;
    RAISERROR ('Error Creating COM Component 0x%x, %s, %s', 16, 1, @hr, @src, @desc);
    RETURN;
END
GO