LOTUS CONNECTOR


ストアドプロシージャによる出力パラメータの近似
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