sp_OACreate (Transact-SQL)

適用於:SQL Server

建立 OLE 對象的實例。

Transact-SQL 語法慣例

語法

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

引數

progid
這是要建立之 OLE 物件的程式設計標識碼 (ProgID)。 此字元字串描述 OLE 物件的類別,並且具有 『OLEComponent』 格式物件'

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

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

Clsid
這是要建立之 OLE 對象的類別標識碼 (CLSID)。 此字元字串描述 OLE 對象的類別,且其格式為: 『{nnnn-nnnn-nnnn-nnnn-nn}』。 指定的 OLE 對象必須有效,而且必須支援 IDispatch 介面。

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

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

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

1 = 僅限進程內 (.dll) OLE 伺服器。

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

5 = 允許行程內和本機 OLE 伺服器

如果未指定,預設值為 5。 此值會當做呼叫 CoCreateInstance 的 dwClsContext 參數傳遞。

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

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

注意

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

傳回碼值

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

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

備註

如果已啟用 OLE 自動化程式,則對 sp_OACreate呼叫將會啟動 OLE Automation 共用執行環境。 如需啟用 OLE 自動化的詳細資訊,請參閱 Ole Automation Procedures Server Configuration Option

建立的 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 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

下列範例會使用其 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 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  

另請參閱

OLE Automation 預存程序 (Transact-SQL)
OLE Automation 程序伺服器組態選項
OLE 自動化範例腳本