sp_OACreate (Transact-SQL)
適用於:SQL Server
建立 OLE 對象的實例。
語法
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。
objecttoken OUTPUT
這是傳回的物件令牌,而且必須是數據類型 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 自動化範例腳本