0

Visual Studio 2010で簡単なレポートを作成していますが、元々は直接クエリがあります。

SELECT     
   DOCDATE, DOCID, CUSTNMBR, CUSTNAME, DOCAMNT
FROM         
   SOP30200
WHERE     
   (DOCDATE BETWEEN @Fromdate AND @Todate)
GROUP BY 
   DOCDATE, DOCID, CUSTNMBR, CUSTNAME, DOCAMNT
HAVING 
   (CUSTNAME = @Custname OR @Custname IS NULL) AND (DOCID IN (@DocID))

DOCIDパラメータを「複数の値を許可する」に設定すると、うまく機能します。

ただし、ストアドプロシージャを作成すると、次のようになります。

CREATE Procedure [dbo].[Jae_EraSales]  
   @Custname nVARCHAR(MAX),
   @DocID nVARCHAR(50),
   @Fromdate datetime,
   @Todate datetime
as
   SELECT     
      DOCDATE, DOCID, CUSTNMBR, CUSTNAME, DOCAMNT
   FROM         
      SOP30200
   WHERE     
      (DOCDATE BETWEEN @Fromdate AND @Todate)
   GROUP BY 
       DOCDATE, DOCID, CUSTNMBR, CUSTNAME, DOCAMNT
   HAVING      
       (CUSTNAME = @Custname) AND (DOCID IN (@DocID))
GO

ストアドプロシージャをデータセットとして使用します...SSRSレポートは何もプルしません。単一のDOCID値を持つデータのみをプルします。

なぜそれが起こっているのか誰かが説明できるでしょうか?

前もって感謝します!

4

1 に答える 1

0

使用するINと、単一の文字列式ではなく、セットが表示されます。このため、テーブルを返すにはCsvToIntなどの関数を実装する必要があります。

IN変数ではなく配列を期待しているので、誰かが非常によく似た質問をしました。これは間違いなく役に立ちます。 パラメータとして渡された場合、tsqlINが正しく機能しません。

その要点は、単にテーブルを返す関数を書くことです。

于 2012-10-22T20:05:31.123 に答える