ストアドプロシージャによる出力パラメータの近似

Lotus® Connector for OLE DB は出力パラメータをサポートしていませんが、ストアドプロシージャによって出力パラメータの機能に近似した結果セットを生成できます。ストアドプロシージャを使用すると、レコードを挿入または更新するときにデータベースによって生成された情報に効率的にアクセスできます。ただし、ストアドプロシージャにより多くの結果セットが生成されても、Lotus Connector for OLE DB は 1 つの結果セットのみを取得します。

ストアドプロシージャを作成するときは、必要な結果セットのみを作成するように注意してください。明らかに 2 つ以上の結果セットを生成するストアドプロシージャを作成するのは避けてください。例えば、2 つの選択ステートメントがあるストアドプロシージャ (例えば、次のサンプルの select1) は、Lotus Connector for OLE DB では処理できません。複数の選択ステートメントを 1 つに結合するには、Union 演算子を使用する方法と、データをローカル変数または一時テーブルに格納する方法があります。

create table oledb_test (descriptionID int, description varchar(200), updtQty int)
go

insert into oledb_test values (1,"My description", 0)
go

create procedure select1 
as
 select count(*) from oledb_test 
 select distinct @newDescription from oledb_test
go

ストアドプロシージャの中に挿入、更新、および削除ステートメントがある場合、そのステートメントの影響を受ける行の数が戻されます。OLE DB は影響を受ける行数を、結果セットとして扱います。したがって、次のサンプルのストアドプロシージャ update1 では、2 つの結果セットが生成されます。影響を受ける行数のレポートは、Transact-SQL の set nocount on コマンドによって無効にできます。したがって、次のサンプルのストアドプロシージャ update2 (set nocount コマンドを使用) では、選択ステートメントによって生成された結果セットのみが戻されます。

注: set nocount をこのように使用することによって、パフォーマンスを向上させ、ネットワークトラフィックを減少させることができます。
create procedure update1 (@descriptionID int, @newDescription varchar(200))
as
 update oledb_test
 set description = @newDescription,
     updtQty = updtQty + 1
 where descriptionID = @descriptionID

 select updtQty from oledb_test where descriptionID = @descriptionID
go

create procedure update2 (@descriptionID int, @newDescription varchar(200))
as
 set nocount on

 update oledb_test
 set description = @newDescription,
     updtQty = updtQty + 1
 where descriptionID = @descriptionID

 set nocount off

 select updtQty from oledb_test where descriptionID = @descriptionID
go