sp_OACreate (Transact-SQL)

適用於:SQL Server

建立 OLE 對象的實例。

Transact-SQL 語法慣例

語法

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

引數

progid

要建立之 OLE 物件的程式設計標識碼 (ProgID)。 此字元字串描述 OLE 物件的類別,且格式為: <OLEComponent>.<Object>

OLEComponent 是 OLE Automation 伺服器的元件名稱,而 Object 是 OLE 對象的名稱。 指定的 OLE 對象必須有效,而且必須支援 IDispatch 介面。

例如, SQLDMO.SQLServer 是 SQL-DMO SQLServer 物件的 ProgID。 SQL-DMO 具有 SQLDMO 的元件名稱、SQLServer物件有效,而且物件支援IDispatch的所有 SQL-DMO 物件SQLServer

clsid

要建立之 OLE 物件的類別識別碼 (CLSID)。 此字元字串描述 OLE 物件的類別,且格式為: {<nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn>}。 指定的 OLE 對象必須有效,而且必須支援 IDispatch 介面。

例如, {00026BA1-0000-0000-C000-000000000046} 是 SQL-DMO SQLServer 物件的 CLSID。

objecttoken OUTPUT

傳回的物件令牌,而且必須是數據類型 int 的局部變數。此物件令牌會識別建立的 OLE 物件,並用於呼叫其他 OLE Automation 預存程式。

context

指定新建立的 OLE 物件執行所在的執行內容。 如果指定,這個值必須是下列其中一個選項:

  • 1 = 僅限進程 (.dll) OLE 伺服器
  • 4 = 僅限本機 (.exe) OLE 伺服器
  • 5 = 允許行程內和本機 OLE 伺服器

若未指定,則預設值為 5。 這個值會當做呼叫 CoCreateInstance的 dwClsContext 參數傳遞。

如果允許同進程 OLE 伺服器(藉由使用 或 的內容值 15 未指定內容值),它可以存取 SQL Server 所擁有的記憶體和其他資源。 同進程 OLE 伺服器可能會損毀 SQL Server 記憶體或資源,並導致無法預期的結果,例如 SQL Server 存取違規。

當您指定 的內容值 4時,本機 OLE 伺服器無法存取任何 SQL Server 資源,而且無法損毀 SQL Server 記憶體或資源。

注意

這個預存程式的參數是由位置指定,而不是依名稱指定。

傳回碼值

0 (success) 或非零數位 (failure),這是 OLE Automation 物件所傳回之 HRESULT 的整數值。

如需 HRESULT 傳回碼的詳細資訊,請參閱 OLE 自動化傳回碼和錯誤資訊

備註

如果已啟用 OLE 自動化程式,則呼叫 以 sp_OACreate 啟動 OLE Automation 共用執行環境。 如需啟用 OLE 自動化的詳細資訊,請參閱 Ole Automation Procedures (伺服器組態選項)

建立的 OLE 物件會在 Transact-SQL 語句批次的結尾自動終結。

權限

需要系統管理員固定伺服器角色的成員資格,或直接在此預存程式上執行許可權。 必須啟用 [Ole Automation Procedures] 伺服器組態選項,才能使用任何與 OLE Automation 相關的系統程式。

範例

A. 使用 ProgID

下列範例會使用其 ProgID 建立 SQL-DMO SQLServer 物件。

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. 使用 CLSID

下列範例會使用其 CLSID 建立 SQL-DMO SQLServer 物件。

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