sp_OACreate (Transact-SQL)

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

トピック リンク アイコンTransact-SQL 構文表記規則

構文

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

引数

  • progid
    作成する OLE オブジェクトのプログラム ID (ProgID) を指定します。これは OLE オブジェクトのクラスを説明する文字列で、'OLEComponent.Object' の形式で指定します。

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

    たとえば、SQLDMO.SQLServer は SQL-DMO SQLServer オブジェクトの ProgID です。SQL-DMO は SQLDMO のコンポーネント名であり、SQLServer オブジェクトは有効かつすべての SQL-DMO オブジェクトと同様に IDispatch インターフェイスをサポートしています。

  • clsid
    作成する OLE オブジェクトのクラス ID (CLSID) を指定します。これは OLE オブジェクトのクラスを説明する文字列で、'{nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn}' の形式で指定します。指定した OLE オブジェクトは有効かつ IDispatch インターフェイスをサポートする必要があります。

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

  • objecttokenOUTPUT
    返されるオブジェクト トークンです。int 型 (整数型) のローカル変数になります。このオブジェクト トークンは、作成する OLE オブジェクトを識別するもので、その他の OLE オートメーション ストアド プロシージャの呼び出しに使用されます。

  • context
    新しく作成した OLE オブジェクトを実行するときの実行条件を指定します。指定する場合は、次のいずれかの値を指定する必要があります。

    1 = 組み込み (.dll) OLE サーバーのみ。

    4 = ローカル (.exe) OLE サーバーのみ。

    5 = 組み込みおよびローカル OLE サーバーの両方が有効。

    値を指定しない場合は、既定値 5 が使用されます。この値は、CoCreateInstance への呼び出しの dwClsContext パラメータとして渡されます。

    context 値に 1 または 5 を使用するか、context 値を指定しないで、組み込み OLE サーバーを有効にした場合は、SQL Server が所有するメモリおよびその他のリソースにアクセスできます。組み込み OLE サーバーは、SQL Server のメモリやリソースに損傷を与え、SQL Server のアクセス違反など予期しない結果を招く場合があります。

    context 値に 4 を指定した場合、ローカル OLE サーバーは SQL Server のどのリソースにもアクセスすることなく、SQL Server のメモリやリソースに損傷を与えることはありません。

    注意

    このストアド プロシージャのパラメータは、名前ではなく位置で指定します。

戻り値

成功した場合は 0、失敗した場合は OLE オートメーション オブジェクトによって返される HRESULT の 0 以外の整数値を返します。

HRESULT の戻り値の詳細については、「OLE オートメーションのリターン コードとエラー情報」を参照してください。

説明

OLE オートメーション プロシージャが有効な場合、sp_OACreate を呼び出すと、OLE オートメーションの共有実行環境が起動します。OLE オートメーションの有効化に関する詳細については、「Ole Automation Procedures オプション」を参照してください。

作成された OLE オブジェクトは、Transact-SQL ステートメント バッチの最後に自動的に破棄されます。

権限

sysadmin 固定サーバー ロールのメンバシップが必要です。

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