sp_OACreate (Transact-SQL)

適用対象: SQL Server

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

Transact-SQL 構文表記規則

構文

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