次の方法で共有


sp_OAMethod (Transact-SQL)

適用対象: SQL Server

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 が指定されていますが、メソッドは値を返しません。
  • このメソッドは、2 つ以上の次元を持つ配列を返します。
  • メソッドが出力パラメーターとして配列を返す場合

[ @parametername = ] parameter [ OUTPUT ]

メソッド パラメーター。 指定する場合、 パラメーター は適切なデータ型の値である必要があります。

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

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

n

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

Note

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

リターン コードの値

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

HRESULT 戻りコードの詳細については、OLE 自動化戻りコードとエラー情報

結果セット

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

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

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

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

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

int float 金額 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固定サーバー ロールのメンバーシップが必要です。または、このストアド プロシージャに対して直接アクセス許可を実行します。 OLE オートメーションに関連するシステム プロシージャを使用するには、 Ole Automation Procedures サーバー構成オプションを有効にする必要があります。

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 OUTPUT;

IF @hr <> 0
BEGIN
    EXEC sp_OAGetErrorInfo @object

    RETURN
END;

PRINT @property;