sp_OACreate (Transact-SQL)

適用対象:SQL Server

OLE オブジェクトのインスタンスを作成します。

Transact-SQL 構文表記規則

構文

  
sp_OACreate { progid | clsid } , objecttoken OUTPUT [ , context ]   

引数

progid
作成する OLE オブジェクトのプログラム識別子 (ProgID) です。 この文字列は OLE オブジェクトのクラスを表し、'OLEComponent' という形式です。オブジェクト'

OLEComponent は OLE オートメーション サーバーのコンポーネント名で 、オブジェクト は OLE オブジェクトの名前です。 指定した OLE オブジェクトは有効であり、IDispatch インターフェイスをサポートしている必要があります。

たとえば、SQLDMO です。SQLServer は、SQL-DMO SQLServer オブジェクトの ProgID です。 SQL-DMO には SQLDMO のコンポーネント名があり、SQLServer オブジェクトは有効であり、(すべての SQL-DMO オブジェクトと同様に) SQLServer オブジェクトは IDispatchサポートします

clsid
作成する OLE オブジェクトのクラス ID (CLSID) を指定します。 この文字列は OLE オブジェクトのクラスを表し、'{nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnn}' という形式になります。 指定した OLE オブジェクトは有効であり、IDispatch インターフェイスをサポートしている必要があります。

たとえば、{00026BA1-0000-0000-C000-0000000000046} は SQL-DMO SQLServer オブジェクトの CLSID です。

objecttokenOUTPUT
返されるオブジェクト トークンであり、データ型 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 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 オートメーションのサンプル スクリプト