Udostępnij za pośrednictwem


sp_OACreate (Transact-SQL)

Dotyczy:programu SQL Server

Tworzy wystąpienie obiektu OLE.

Transact-SQL konwencje składni

Składnia

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

Argumenty

Ważny

Argumenty dla rozszerzonych procedur składowanych należy wprowadzić w określonej kolejności zgodnie z opisem w sekcji składni. Jeśli parametry są wprowadzane poza kolejnością, wystąpi komunikat o błędzie.

progid

Identyfikator programowy (ProgID) obiektu OLE do utworzenia. Ten ciąg znaków opisuje klasę obiektu OLE i ma postać: <OLEComponent>.<Object>.

OLEComponent jest nazwą składnika serwera automatyzacji OLE, a Object jest nazwą obiektu OLE. Określony obiekt OLE musi być prawidłowy i musi obsługiwać interfejs IDispatch.

Na przykład SQLDMO.SQLServer jest wartością ProgID obiektu SQL-DMO SQLServer. SQL-DMO ma nazwę składnika SQLDMO, obiekt SQLServer jest prawidłowy i (podobnie jak wszystkie obiekty SQL-DMO) obiekt SQLServer obsługuje IDispatch.

clsid

Identyfikator klasy (CLSID) obiektu OLE do utworzenia. Ten ciąg znaków opisuje klasę obiektu OLE i ma postać: {<nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn>}. Określony obiekt OLE musi być prawidłowy i musi obsługiwać interfejs IDispatch.

Na przykład {00026BA1-0000-0000-C000-000000000046} jest identyfikatorem CLSID obiektu SQL-DMO SQLServer.

objecttoken OUTPUT

Zwrócony token obiektu i musi być lokalną zmienną typu danych int. Ten token obiektu identyfikuje utworzony obiekt OLE i jest używany w wywołaniach do innych procedur składowanych automatyzacji OLE.

kontekstu

Określa kontekst wykonywania, w którym jest uruchamiany nowo utworzony obiekt OLE. Jeśli zostanie określona, ta wartość musi być jedną z następujących opcji:

  • 1 = tylko serwer OLE (.dll)
  • 4 = lokalny (tylko serwer OLE.exe)
  • 5 = dozwolony zarówno w procesie, jak i lokalnym serwerze OLE

Jeśli nie zostanie określona, wartość domyślna to 5. Ta wartość jest przekazywana jako parametr dwClsContext wywołania do CoCreateInstance.

Jeśli serwer OLE w procesie jest dozwolony (przy użyciu wartości kontekstowej 1 lub 5 lub nie określając wartości kontekstu), ma dostęp do pamięci i innych zasobów należących do programu SQL Server. Serwer OLE w procesie może uszkodzić pamięć lub zasoby programu SQL Server i spowodować nieprzewidywalne wyniki, takie jak naruszenie dostępu programu SQL Server.

Po określeniu wartości kontekstu 4lokalny serwer OLE nie ma dostępu do żadnych zasobów programu SQL Server i nie może uszkodzić pamięci ani zasobów programu SQL Server.

Nuta

Parametry tej procedury składowanej są określane według pozycji, a nie według nazwy.

Zwracanie wartości kodu

0 (powodzenie) lub liczba niezerowa (niepowodzenie), która jest liczbą całkowitą HRESULT zwróconą przez obiekt automatyzacji OLE.

Aby uzyskać więcej informacji na temat kodów powrotnych HRESULT, zobacz kody powrotne automatyzacji OLE i informacje o błędach.

Uwagi

Jeśli procedury automatyzacji OLE są włączone, wywołanie sp_OACreate uruchamia współużytkowane środowisko wykonywania automatyzacji OLE. Aby uzyskać więcej informacji na temat włączania automatyzacji OLE, zobacz Procedury automatyzacji Ole (opcja konfiguracji serwera).

Utworzony obiekt OLE jest automatycznie niszczony na końcu partii instrukcji Transact-SQL.

Uprawnienia

Wymaga członkostwa w sysadmin stałej roli serwera lub wykonywania uprawnień bezpośrednio w tej procedurze składowanej. Aby można było używać dowolnej procedury systemowej powiązanej z automatyzacją OLE, należy włączyć opcję konfiguracji serwera Ole Automation.

Przykłady

A. Użyj identyfikatora progID

Poniższy przykład tworzy obiekt SQL-DMO SQLServer przy użyciu jego identyfikatora ProgID.

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. Używanie identyfikatora CLSID

Poniższy przykład tworzy obiekt SQL-DMO SQLServer przy użyciu identyfikatora CLSID.

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