sp_OACreate (Transact-SQL)
適用対象: SQL サーバー
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 オブジェクトは有効であり、(すべての SQL-DMO オブジェクトと同様に) SQLServer オブジェクトは IDispatch をサポートします。
clsid
作成する OLE オブジェクトのクラス ID (CLSID) を指定します。 この文字列は OLE オブジェクトのクラスを表し、形式は '{nnnnnn-nnnn-nnnn-nnnn-nnnn}'。 指定した OLE オブジェクトは有効であり、 IDispatch インターフェイスをサポートしている必要があります。
たとえば、{00026BA1-0000-0000-C000-0000000000046} は、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 Automation リターン コードとエラー情報を参照してください。
解説
OLE オートメーション プロシージャが有効になっている場合、 sp_OACreate を呼び出すと、OLE オートメーションの共有実行環境が開始されます。 OLE オートメーションを有効にする方法の詳細については、「 オートメーション プロシージャ サーバー構成オプションを参照してください。
作成された OLE オブジェクトは、Transact-SQL ステートメント バッチの最後に自動的に破棄されます。
アクセス許可
sysadmin固定サーバー ロールのメンバーシップが必要です。または、このストアド プロシージャに対して直接アクセス許可を実行します。 Ole Automation Procedures
OLE オートメーションに関連するシステム プロシージャを使用するには構成を有効にする必要があります。
例
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 オートメーション ストアド プロシージャ (Transact-SQL)
Ole Automation Procedures サーバー構成オプション
OLE オートメーションのサンプル スクリプト