SSRSでストアドプロシージャから複数のデータセットを取得する
以下のように、複数の結果セットを返すストアドプロシージャがあります。
Create StoredProcedure sp_MultipleDataSets
as
begin
SELECT EMPID, ENAME, JOB, SAL, DEPTID FROM EMP -- first result set
SELECT DEPTID, DNAME, LOC FROM DEPT --second result set
end
BIDSで、新しいレポートを作成する際に、私はデータセットのためのストアドプロシージャを構成しました。これは、最初の結果セットから返されたカラムのみで、データセットを作成します。2番目の結果セットを識別しません。
どうすれば、上記のようなストアドプロシージャから両方の結果セットに対してデータセットを作成することができるのでしょうか?
24
3
残念ながら、ドキュメントで説明しているのはこちらの通りです。
1つのクエリで複数の結果セットを取得した場合、最初の結果セットのみが処理され、他の結果セットは無視されます。
(この質問]2を経由して見つけました)。
したがって、2つの可能性のうちの1つを使用することをお勧めします。
(1) プロシージャを2つに分割して、1つはEMPから、もう1つはDEPTからデータを返し、新しいプロシージャを2つの別々のデータセットとしてアクセスします。
(2) 2つの別々のクエリを結合し(それぞれの行を生成したクエリを示す列を追加)、レポートを適切にフィルタリングまたは条件付きでフォーマットする。結合されたクエリは、以下のようになります。
私はいつもSSRSで複数のResultセットを取得するためにSPでParameterを使用しています。 SPのIF文で区切って、SSRSのDataset setupでFIELDをHAND TYPEアウトする必要があるんだ。
奇妙に見えるけど、うまくいくんだ...。
以下はその例です。
ストアドプロシージャ(SP)には、2つのパラメータが定義されています。 役員ID データセットフラグ
OfficerID は、入力する必要のある従業員番号です(SSRS データ入力フォーム)。 DatasetFlag は、SP で実行される IF ステートメントを制御する方法です。
以下は、そのSPです。
REPORT には 2 つのデータセットがあり、1 つは私が作成したもので、パラメータと EmployeeName を取り込みます。 もう一つは私が作成したもので、SSRS は 1 つの結果セットしか使用できないため、EmployeeName を取り込みます。 しかし....私はそれをだます....
しかし、私は単純にEMPLOYENAMEをOVERTYPINGすることによってフィールドを作成し、その後、残りの部分を追加する(クエリ)。 残りの部分(クエリ)だから、データセットのPROPERTIESでFIELDSを編集して、選択列名を入れてください。
そして、PARAMETERSメニュー(Dataset Properties)から、="EmployeeName".というEXPRESSIONを入力します。 を、2番目のデータセットには="Expect"を指定します。 その画面で@OfficeIDも合わせています。
これを実行すると、OfficerIDを要求されます(RSは入力フォームを作成します)。 で、そのIDを入れてVIEW REPORTを押すと。 あるいは、SSRSのフォームと同じように、ASPXページでOfficerIDを指定して、RDLをすべて作成することもできます。
BOTH DATASETSが返される(2回呼んでいるのは私の推測)。
だから、UNIONデータセットに奇抜なFILTERINGをかけたり、SSRSで処理しなければならないようなトリックをする必要がない、これは面白くない...(マジIIF?)
あるストアドプロシージャでは、20個のパラメータがあり、レポート出力にフィルタをかけることができます。 ということで、SQLレベルでレポート出力にフィルタをかけることができます。
20個のストアドプロシージャを単純に作成することはできませんが、この方法では、すべてのコードが1つの場所にあり、もちろんTEMPテーブルへのselectを使って大量のものをマージすることができます。 そして最終的には、結果セットであるテーブルを作成するだけです。
プログラマーとして、私はSSRSが少しおかしいと思いますが、今のところ、私は楽しみながら、それが提供するものではなく、私が欲しいものを得る方法を見つけようとしています...
そんな感じでやってみてください。