sp_OACreate (Transact-SQL)
適用於:SQL Server
建立 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
物件有效,而且物件支援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 伺服器(藉由使用 或 的內容值 1
或 5
未指定內容值),它可以存取 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