Share via


sp_OACreate (Transact-SQL)

建立 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 物件有效,且 (如同所有 SQL-DMO 物件) SQLServer 物件會支援 IDispatch

  • clsid
    這是要建立的 OLE 物件之類別識別碼 (CLSID)。這個字元字串用來描述 OLE 物件的類別,格式如下:'{nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn}'。指定的 OLE 物件必須有效,且必須支援 IDispatch 介面。

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

  • objecttokenOUTPUT
    這是傳回的物件 Token,它必須是 int 資料類型的本機變數。這個物件 Token 會識別所建立的 OLE 物件,且用來呼叫其他 OLE Automation 預存程序。

  • context
    指定執行新建立之 OLE 物件的執行內容。如果指定的話,這個值必須是下列值之一:

    1 = 只限同處理序 (.dll) OLE 伺服器。

    4 = 只限本機 (.exe) OLE 伺服器。

    5 = 允許同處理序和本機 OLE 伺服器。

    若未指定,預設值是 5。這個值是作為呼叫的 dwClsContext 參數來傳遞給 CoCreateInstance

    如果允許同處理序 OLE 伺服器 (藉由使用內容值 15,或不指定內容值),它便能存取 SQL Server 所擁有的記憶體和其他資源。同處理序 OLE 伺服器可能會損毀 SQL Server 記憶體或資源,並造成無法預期的結果,如 SQL Server 存取違規。

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

    [!附註]

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

傳回碼值

0 (成功) 或非零數字 (失敗),這個數字是 OLE Automation 物件所傳回之 HRESULT 的整數值。

如需有關 HRESULT 傳回碼的詳細資訊,請參閱<OLE Automation 傳回碼與錯誤資訊>。

備註

如果啟用了 OLE Automation 程序,呼叫 sp_OACreate 會啟動 OLE Automation 共用執行環境。如需有關啟用 OLE Automation 的詳細資訊,請參閱<Ole Automation Procedures 選項>。

在 Transact-SQL 陳述式批次結束時,會自動部署所建立的 OLE 物件。

權限

需要系統管理員 (sysadmin) 固定伺服器角色中的成員資格。

範例

A. 使用 ProgID

下列範例會藉由利用 SQL-DMO SQLServer 物件的 ProgID 來建立物件本身。

DECLARE @object int;
DECLARE @hr int;
DECLARE @src varchar(255), @desc varchar(255);
EXEC @hr = sp_OACreate 'SQLDMO.SQLServer', @object OUT;
IF @hr <> 0
BEGIN
   EXEC sp_OAGetErrorInfo @object, @src OUT, @desc OUT 
   raiserror('Error Creating COM Component 0x%x, %s, %s',16,1, @hr, @src, @desc)
    RETURN
END;
GO

B. 使用 CLSID

下列範例會利用 SQL-DMO SQLServer 物件的 CLSID 來建立物件本身。

DECLARE @object int;
DECLARE @hr int;
DECLARE @src varchar(255), @desc varchar(255;)
EXEC @hr = sp_OACreate '{00026BA1-0000-0000-C000-000000000046}',
    @object OUT;
IF @hr <> 0
BEGIN
   EXEC sp_OAGetErrorInfo @object, @src OUT, @desc OUT 
   raiserror('Error Creating COM Component 0x%x, %s, %s',16,1, @hr, @src, @desc)
    RETURN
END;
GO