sp_OACreate (Transact-SQL)
建立 OLE 物件的執行個體。
語法
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 伺服器 (藉由使用內容值 1 或 5,或不指定內容值),它便能存取 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