sp_OACreate (Transact-SQL)
適用対象: SQL Server
OLE オブジェクトのインスタンスを作成します。
構文
sp_OACreate { progid | clsid }
, objecttoken OUTPUT
[ , context ]
[ ; ]
引数
progid
作成する OLE オブジェクトのプログラム識別子 (ProgID)。 この文字列は OLE オブジェクトのクラスを表し、 <OLEComponent>.<Object>
という形式です。
OLEComponent は OLE オートメーション サーバーのコンポーネント名、 Object は OLE オブジェクトの名前です。 指定した OLE オブジェクトは有効であり、 IDispatch
インターフェイスをサポートしている必要があります。
たとえば、 SQLDMO.SQLServer
は SQL-DMO SQLServer
オブジェクトの ProgID です。 SQL-DMO には SQLDMO のコンポーネント名があり、 SQLServer
オブジェクトは有効であり、 SQLServer
オブジェクトは (すべての SQL-DMO オブジェクトと同様に) IDispatch
をサポートします。
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 オートメーション ストアド プロシージャの呼び出しで使用されます。
context
新しく作成した OLE オブジェクトを実行するときの実行条件を指定します。 指定する場合、この値は次のいずれかのオプションである必要があります。
1
= インプロセス (.dll
) OLE サーバーのみ4
= ローカル (.exe
) OLE サーバーのみ5
= インプロセス OLE サーバーとローカル OLE サーバーの両方が許可されます
指定しない場合は、既定値の 5
が使用されます。 この値は、CoCreateInstance
の呼び出しの dwClsContext パラメーターとして渡されます。
インプロセス OLE サーバーが許可されている場合 ( 1
または 5
のコンテキスト値を使用するか、コンテキスト値を指定しない場合)、SQL Server が所有するメモリやその他のリソースにアクセスできます。 インプロセス OLE サーバーでは、SQL Server のメモリやリソースが破損し、SQL Server のアクセス違反など、予期しない結果が発生する可能性があります。
4
のコンテキスト値を指定すると、ローカル OLE サーバーは SQL Server リソースにアクセスできないため、SQL Server のメモリやリソースに損害を与えることはありません。
Note
このストアド プロシージャのパラメーターは、名前ではなく位置によって指定されます。
リターン コードの値
0
(成功) または 0 以外の数値 (失敗) は、OLE オートメーション オブジェクトによって返される HRESULT の整数値です。
HRESULT 戻りコードの詳細については、 OLE 自動化戻りコードとエラー情報を参照してください。
解説
OLE オートメーション プロシージャを有効にすると、 sp_OACreate
呼び出しによって OLE オートメーションの共有実行環境が開始されます。 OLE オートメーションの有効化の詳細については、「 Ole Automation Procedures (サーバー構成オプション)」を参照してください。
作成された OLE オブジェクトは、Transact-SQL ステートメント バッチの最後に自動的に破棄されます。
アクセス許可
sysadmin固定サーバー ロールのメンバーシップが必要です。または、このストアド プロシージャに対して直接アクセス許可を実行します。 OLE オートメーションに関連するシステム プロシージャを使用するには、 Ole Automation Procedures サーバー構成オプションを有効にする必要があります。
例
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