存储过程不适用于"allow multiple values"但直接查询在Visual Studio Reporting Services中有效?



我正在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值拉数据。

有人可以解释为什么会发生这种情况吗?

预先感谢您!

使用IN时,它会查看一个集合而不是单个字符串表达式。因此,您需要实现诸如CSVToint之类的函数才能返回表。

IN期望一个数组不是变量,有人问了一个非常相似的问题,这肯定会帮助您:tsql如果传递为参数,则无法正常工作

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

最新更新