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期望数组不是变量,有人问了一个非常相似的问题,这肯定会对您有所帮助: tsql IN not working proper if passing as parameter

它的要点只是编写一个返回表的函数。

于 2012-10-22T20:05:31.123 回答