I am working on a simple report in Visual Studio 2010 where originally I have a direct query:
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))
with the DOCID parameter set to “Allow multiple values” which works great.
However, when I create a stored procedure:
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
and use the stored procedure as my dataset…the SSRS report does not pull anything. It only pulls data with a single DOCID value.
Would anyone be able to explain why that is happening?
Thank you in advance!
When you use
INit looks at a set and not a single string expression. Because of this you need to implement a function such as CsvToInt to return a table.INexpects an array not a variable, someone asked a very similar question which will definitely help you: tsql IN not working properly if passed as parameterThe gist of it is simply writing a function that returns a table.