0

Reporting Services 2008 でデータセットを作成する際に問題が発生しました。使用したいクエリは次のとおりです (公開用に一般化されています)。

Declare @PersonID as int
set @PersonID = (select top 1 personID from People where name = @PersonName)

select (some columns)
from [otherTable]
where personID = @PersonID

入力パラメーターは 1 つだけです: @PersonName. ただし、Studio 2008 では、[クエリ パラメータの定義] ウィンドウに@PersonID も値が必要であると考えているようです。そのため、 の値のみを入力しようとすると@PersonName、「この変数は既に定義されています」と表示されます。

@PersonNameレポートの唯一のユーザー向けパラメーターとして、ドロップダウンから選択する人々の可読リストを表示する必要があるため、合格です。サブクエリを実行して上記の例の変数を忘れることができることに気づきましたが、実際のクエリははるかに大きく/醜く、データテーブルにインデックスを正確に追加できないため、テーブルスキャンを制限したいと思います.

4

3 に答える 3

2

パラメータで使用する新しいデータセットを作成できます。

まず、次のクエリを持つ新しいデータセット

SELECT PersonID, PersonName FROM People

次に、レポート パラメーター (わかりやすくするために名前をPersonに変更しています) の [利用可能な値] セクションで、[クエリから値を取得する] に切り替えます。新しいデータセットを選択し、Value フィールドを PersonID に、Label フィールドを PersonName に設定します。

最後に、メイン データセットの @PersonID パラメータをレポート パラメータ [@Person] に設定します。

このようにして、リストを表示できますが、ID を使用することはできます。PersonName レポート パラメーターは必要ありません。

于 2012-10-05T19:41:59.583 に答える
0
Declare @PersonName char(20) 

select (some columns)
from  [otherTable] 
join  [People]
  on  [otherTable].[personID] = [People].[personID]
where [People].[name] = @PersonName 

パフォーマンスの問題が発生すると考える前に、試してみてください。

于 2012-10-05T23:44:01.853 に答える
0

クエリをストアド プロシージャに変えてみませんか? 私の経験から、ストアド プロシージャはパフォーマンスが向上し (ただし、パラメーター スニッフィングには注意してください)、再利用性も向上します。

編集:

そして、それは間違いなくあなたの問題を解決します。

于 2012-10-13T21:54:47.577 に答える