8

SSRSで次のクエリを実行しています。2 つのパラメーターの宣言を追加すると、SQL 管理コンソールで問題なく動作します。

declare @EMRQuery varchar(max)
declare @CPSQuery varchar(max)

set @EMRQuery = 'select Person.ExternalId 
                    from ml.Person 
                        join ml.Obs on Person.pId = Obs.pId 
                            join ml.ObsHead on Obs.hdId = ObsHead.hdId 
                    where ObsHead.name = ''SCHOOLREGDTE'' 
                        and Obs.xId = 1.e+035
                        and Obs.change = 2 
                        and Obs.obsDate >= to_date(''' 
                            + convert(varchar(30), @DateYearStart, 120) 
                            + ''', ''YYYY-MM-DD HH24:MI:SS'')
                        and Obs.obsDate < to_date(''' 
                            + convert(varchar(30), @DateQuarterEnd, 120) 
                            + ''', ''YYYY-MM-DD HH24:MI:SS'')'

set @CPSQuery = 'select ic.ListName, count(distinct pp.patientprofileid) as PatCount
                    from PatientProfile pp
                        left join PatientInsurance pi on pp.PatientProfileId = pi.PatientProfileId
                                and pi.OrderForClaims = 1
                                and pi.Inactive <> 1
                            left join InsuranceCarriers ic on pi.InsuranceCarriersId = ic.InsuranceCarriersId
                        join OpenQuery(EMR_LIVE
                            ,  ''' + replace(@EMRQuery, '''', '''''') +
                        ''' ) Students on pp.PatientId = Students.ExternalId
                    group by ic.ListName '

exec(@CPSQuery)

ただし、これを SSRS にプラグインすると、レポートに使用できるフィールドがあることが登録されません。作業するフィールドがあることを SSRS に納得させるにはどうすればよいですか? ありがとう。

編集:クエリでパラメーターを宣言したところ、フィールド名が認識されました。

declare @DateYearStart datetime
declare @DateQuarterEnd datetime
set @DateYearStart = '2011-07-01'
set @DateQuarterEnd = '2012-03-31'

もちろん、クエリ パラメータとして 1 回、クエリ内で 1 回、パラメータを 2 回宣言していたため、エラーが発生しました。しかし、上記の行をコメントアウトするとすぐに、フィールドが再び失われました。

4

5 に答える 5

5

MSDN フォーラムの誰かが、一時テーブルを選択することを提案したので、最後の exec ステートメントを次のように置き換えました。

declare @CarrierList table (Listname varchar(200), PatCount int);
insert @CarrierList exec(@CPSQuery)
select * from @CarrierList

そして今はうまくいっているようです。

于 2012-05-04T17:45:01.903 に答える
3

作業するフィールドがあることを SSRS にどのように納得させますか? 回答: [データセットのプロパティ...フィールド] からフィールドをデータセットに手動で追加します。これによりデザイナーは満足し、クエリが実行されたときにフィールドが存在する限り、レポートは機能します。少なくとも、動的クエリ テキストを使用して DB2 への OLE DB クエリを使用すると、うまくいきました。

于 2013-07-16T20:37:47.563 に答える
1

SSRS はSET FMTONLY ON;、更新ボタンをクリックするとストアド プロシージャを実行するためです。次にSET FMTONLY OFF;、ストアド プロシージャの最初の行に a を配置すると、フィールドが返されます。

于 2013-03-30T17:31:42.917 に答える
1

クエリに問題がある可能性があります。SSRS データセットは、入力したものをほとんど評価できます。たとえば、次の 2 つのクエリを使用して簡単なテストを実行しました。

declare @a varchar(500)
declare @b varchar(500)
set @a = '(select name from sys.tables) B'
set @b = 'select B.name as name2 from '+@a
exec(@b)

そして、私のデータセットはフィールド name2 を認識しました。

クエリを確認することをお勧めします。

本当にうまくいかない場合は、定義済みのフィールド名を持つテーブルを返す SQL Server プロシージャにコードを追加してみてください。

于 2012-05-02T23:18:10.560 に答える
0

これは、実行するクエリが 1 つだけであるにもかかわらず、コードに 2 つのクエリが含まれているためだと思われます。したがって、2 つのクエリを 1 つのクエリに結合することをお勧めします。

于 2012-05-03T08:07:21.580 に答える