sp_OACreate (Transact-SQL)
OLE オブジェクトのインスタンスを作成します。
適用対象: SQL Server (SQL Server 2008 から現在のバージョンまで) |
構文
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 です。
objecttoken OUTPUT
返されるオブジェクト トークンです。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
関連項目
参照
OLE オートメーション ストアド プロシージャ (Transact-SQL)