sp_OAMethod (Transact-SQL)

OLE オブジェクトのメソッドを呼び出します。

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

構文

sp_OAMethod objecttoken , methodname
    [ , returnvalue OUTPUT ] 
    [ , [ @parametername = ] parameter [ OUTPUT ] [ ...n ] ] 

引数

  • objecttoken
    以前に sp_OACreate で作成した OLE オブジェクトのオブジェクト トークンです。

  • methodname
    呼び出す OLE オブジェクトのメソッド名です。

  • returnvalue OUTPUT
    OLE オブジェクトのメソッドの戻り値です。指定する場合は、適切なデータ型のローカル変数でなければなりません。

    メソッドが単一の値を返す場合は、returnvalue にローカル変数を指定すると、メソッドの戻り値をローカル変数に返します。returnvalue を指定しない場合は、メソッドの戻り値を単一列、単一行の結果セットとしてクライアントに返します。

    メソッドの戻り値が OLE オブジェクトである場合、returnvalue のローカル変数は int 型 (整数型) であることが必要です。オブジェクト トークンがローカル変数に格納され、このオブジェクト トークンを他の OLE オートメーション ストアド プロシージャで使用できます。

    メソッドの戻り値が配列の場合に returnvalue を指定すると、NULL に設定されます。

    次のいずれかの状況になると、エラーが発生します。

    • returnvalue が指定され、メソッドが値を返さない場合

    • メソッドが 3 次元以上の配列を返す場合

    • メソッドが出力パラメータとして配列を返す場合

  • [ @parametername**=** ] parameter[ OUTPUT ]
    メソッド パラメータです。指定する場合、parameter は適切なデータ型の値にする必要があります。

    出力パラメータの戻り値を取得するには、parameter は適切なデータ型のローカル変数で、OUTPUT を指定する必要があります。定数 parameter を指定する場合、または OUTPUT を指定しない場合は、出力パラメータからの戻り値は無視されます。

    指定した場合、parametername は、Microsoft Visual Basic の名前付きパラメータの名前にする必要があります。@parametername は、Transact-SQL のローカル変数ではありません。アット マーク (@) は削除され、parametername はパラメータ名として OLE オブジェクトに渡されます。すべての名前付きのパラメータは、位置で決まるパラメータをすべて指定した後で指定する必要があります。

  • n
    複数のパラメータを指定できることを示すプレースホルダです。

    注意

    @parametername は指定メソッドの一部としてオブジェクトに渡されるため、パラメータの名前を指定できます。このストアド プロシージャのその他のパラメータは、名前ではなく位置で指定します。

戻り値

成功した場合は 0 を、失敗した場合は OLE オートメーションが返す HRESULT の 0 以外の整数値をそれぞれ返します。

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

結果セット

メソッドの戻り値が 1 次元または 2 次元の配列である場合、配列は結果セットとしてクライアントに返されます。

  • 1 次元の配列の場合は、配列内の要素数と同数の列を持つ 1 行の結果セットとしてクライアントに返されます。つまり、配列は (列数) として返されます。

  • 2 次元の配列の場合は、最初の次元の配列の要素数を列数とし、2 番目の次元の配列の要素数を行数とした結果セットとしてクライアントに返します。つまり、配列を (列数,行数) として返します。

プロパティまたはメソッドの戻り値が配列である場合、sp_OAGetProperty または sp_OAMethod は結果セットをクライアントに返します。メソッドの出力パラメータを配列にすることはできません。これらのプロシージャは、配列内のすべてのデータ値をスキャンし、結果セットのそれぞれの列に使用する SQL Server の適切なデータ型とデータ長を決定します。これらのプロシージャは必要なデータ型とデータ長を使用して、特定の列内のすべてのデータ値を表現します。

列内のすべてのデータ値が同じデータ型を共有する場合は、そのデータ型を列全体で使用します。1 列のデータ値がそれぞれ異なるデータ型である場合、列全体に適用されるデータ型は次の表を基に選択されます。

 

int

float

money

datetime

varchar

nvarchar

int

int

float

money

varchar

varchar

nvarchar

float

float

float

money

varchar

varchar

nvarchar

money

money

money

money

varchar

varchar

nvarchar

datetime

varchar

varchar

varchar

datetime

varchar

nvarchar

varchar

varchar

varchar

varchar

varchar

varchar

nvarchar

nvarchar

nvarchar

nvarchar

nvarchar

nvarchar

nvarchar

nvarchar

説明

プロパティ値の取得に、sp_OAMethod を使用することもできます。

権限

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

A. メソッドを呼び出す

次の例では、以前に作成した SQLServer オブジェクトの Connect メソッドを呼び出しています。

EXEC @hr = sp_OAMethod @object, 'Connect', NULL, 'my_server',
    'my_login', 'my_password'
IF @hr <> 0
BEGIN
   EXEC sp_OAGetErrorInfo @object
    RETURN
END

B. プロパティを取得する

次の例では、以前に作成した SQLServer オブジェクトの HostName プロパティを取得し、それをローカル変数に格納します。

DECLARE @property varchar(255)
EXEC @hr = sp_OAMethod @object, 'HostName', @property OUT
IF @hr <> 0
BEGIN
   EXEC sp_OAGetErrorInfo @object
    RETURN
END
PRINT @property