sp_OACreate (Transact-SQL)
OLE オブジェクトのインスタンスを作成します。
構文
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