From: OriginalStealth on
stored procedure 1: exec getcolor @color = blue....this runs fine.
stored procedure 2: exec getcolors @colors in('red', 'white',
'blue').........bombs

code is

create procedure getcolors @colors nvarchar (50)
as
(select *
from hrs_by_activity
where color in(@colors)
)

need help making this work.
thanks in advance
From: Bruce L-C [MVP] on
Below is my standard response about this. As you will see, it touches
exactly on what you are doing and why it doesn't work and what you need to
do:

What doesn't work has nothing really to do with RS but has to do with Stored
Procedures in SQL Server. You cannot do the following in a stored procedure.

Let's say you have a Parameter called @MyParams

Now you can map that parameter to a multi-value parameter but if in your
stored procedure you try to do this:

select * from sometable where somefield in (@MyParams)

It won't work. Try it. Create a stored procedure and try to pass a
multi-value parameter to the stored procedure. It won't work.

What you can do is to have a string parameter that is passed as a multivalue
parameter and then change the string into a table.

This technique was told to me by SQL Server MVP, Erland Sommarskog

For example I have done this

inner join charlist_to_table(@STO,Default)f on b.sto = f.str

So note this is NOT an issue with RS, it is strictly a stored procedure
issue.

Here is the function:
CREATE FUNCTION charlist_to_table
(@list ntext,
@delimiter nchar(1) = N',')
RETURNS @tbl TABLE (listpos int IDENTITY(1, 1) NOT NULL,
str varchar(4000),
nstr nvarchar(2000)) AS

BEGIN
DECLARE @pos int,
@textpos int,
@chunklen smallint,
@tmpstr nvarchar(4000),
@leftover nvarchar(4000),
@tmpval nvarchar(4000)

SET @textpos = 1
SET @leftover = ''
WHILE @textpos <= datalength(@list) / 2
BEGIN
SET @chunklen = 4000 - datalength(@leftover) / 2
SET @tmpstr = @leftover + substring(@list, @textpos, @chunklen)
SET @textpos = @textpos + @chunklen

SET @pos = charindex(@delimiter, @tmpstr)

WHILE @pos > 0
BEGIN
SET @tmpval = ltrim(rtrim(left(@tmpstr, @pos - 1)))
INSERT @tbl (str, nstr) VALUES(@tmpval, @tmpval)
SET @tmpstr = substring(@tmpstr, @pos + 1, len(@tmpstr))
SET @pos = charindex(@delimiter, @tmpstr)
END

SET @leftover = @tmpstr
END

INSERT @tbl(str, nstr) VALUES (ltrim(rtrim(@leftover)),
ltrim(rtrim(@leftover)))
RETURN
END

GO


--
Bruce Loehle-Conger
MVP SQL Server Reporting Services

"OriginalStealth" <OriginalStealth(a)discussions.microsoft.com> wrote in
message news:891551F0-605F-453D-BC23-4036A597DDDC(a)microsoft.com...
> stored procedure 1: exec getcolor @color = blue....this runs fine.
> stored procedure 2: exec getcolors @colors in('red', 'white',
> 'blue').........bombs
>
> code is
>
> create procedure getcolors @colors nvarchar (50)
> as
> (select *
> from hrs_by_activity
> where color in(@colors)
> )
>
> need help making this work.
> thanks in advance