我正在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如果传递为参数,则无法正常工作
它的要旨只是编写一个返回表的函数。