レポート ビルダーでレポート (プライマリと呼びます) とドリルスルー (セカンダリと呼びます) を作成しました。それぞれに SQL ステートメントがあります。
SQL Server Management Studio で実行すると、SQL ステートメントは期待どおりに機能します。
ただし、Primary.rdl と Secondary.rdl を Report Manager (Internet Explorer の Web インターフェイス) にアップロードすると、実行時に正しいデータが生成されません。
このため、問題は SQL ステートメントではないと思います。レポートマネージャーと関係があると思います。
プライマリ SQL ステートメント:
このステートメントは、複数のテーブルから一連のユーザー データを取得し、それらのパスワードが受け入れられるかどうかを確認します。パスワードのチェックに失敗したユーザーのリストを作成します。
This is pseudocode so pardon inconsistencies in var names
with details as (
select u.userid
, u.password
, u.firstname
, u.lastname
, u.userdescription
, u.status
, u.lastlog
, dbo.IsPassswordAcceptable(u.userid, u.password) as passStatus
from masterListOfUsers as u
)
select d.*, p.datavalue
from details as d
left join passwordDetailList as p
on p.keyvalue = d.passStatus
and p.datatype = 'ERRORMESSAGE'
where d.passStatus <> 1
and d.passStatus <> -5
and d.status = (@USERSTATUS) -- only user ids in use
;
2 次 SQL ステートメント:
このステートメントはドリルスルーです。レポートを実行している人は、上記のリストのユーザー ID をクリックできます。そのユーザー ID の連絡先情報が取り込まれるドリルスルーが実行されます。
This is pseudocode so pardon inconsistencies in var names
SELECT
m.userid
, c.address
, c.city
, c.state
, c.zip
, c.cphone
FROM userMasterList AS m
left join userDetailList AS d
ON d.userid = m.userid
left join anotherList as e on d.fullkey = e.fullkey
left join yetAnotherList AS c
WHERE m.userid = @USERID;
期待される結果:
ユーザーがプライマリを実行すると、不正なパスワードを持つユーザーのリストが作成されます。各ユーザーのユーザー ID をクリックすると、セカンダリがトリガーされ、そのユーザー ID に関連付けられた場所/連絡先情報が入力されます。
実結果:
userID をクリックすると、セカンダリは userID に関連付けられた場所/連絡先情報の入力に失敗します。これは時々発生します。それ以外の場合は、正常に動作します。
これらの「空の」ユーザー ID のリストを作成し、Management Studio でセカンダリの SQL ステートメントを実行すると、予想されるすべての場所/連絡先情報が入力されます。
私が試した解決策:
私は絶対に困惑しています。SQL ステートメントをトリプルチェックし、Management Studio でテストしました。両方の .rdl ファイルを Report Manager に再アップロードしました。レポート マネージャーの [リンクされたレポートの作成] オプションと、レポート ビルダーの [アクション] > [レポートに移動] オプションを使用して、セカンダリをプライマリに再割り当てしました。
他に何ができますか?