Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
Home
Discussion Groups
DB Engine
SQL ServerMSDESQL Server CE
Services
Analysis (Data Mining)Analysis (OLAP)DTSIntegration ServicesNotification ServicesReporting Services
Programming
CLRConnectivitySQLXML
Other Technologies
ClusteringEnglish QueryFull-Text SearchReplicationService Broker
General
Data WarehousingPerformanceSecuritySetupSQL Server ToolsOther SQL Server Topics
DirectoryUser Groups
Related Topics
MS AccessOther DB ProductsMS Server Products.NET DevelopmentVB DevelopmentJava DevelopmentMore Topics ...

SQL Server Forum / Services / Reporting Services / October 2006

Tip: Looking for answers? Try searching our database.

Parameter multi-value problem when using a stored procedure

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
Peter - 31 Oct 2006 16:51 GMT
Hi folks,
I am describing the issue as below:
1. create a stored procedure as below
     .....where age in (@p_age)
     note: age is the table coumn of table table1 with datatype tinyint
2. ..... and create a second dataset for parameter @p_age
     select distinct age from table1
3. associate the parameter....run it
4. There is no problem with single value. But when two ages are selected,
  I got error message, "...Erro convert data type nvarchar to tinyint"
Please advise. Peter
Bruce L-C  [MVP] - 31 Oct 2006 17:18 GMT
You cannot pass and use multi-value parameters to a stored procedure and use
it in a query as you have. If that query was in RS itself then it would
work. This is not a RS thing, it is a SQL Server stored procedure issue.
Just try it from Query Analyzer and you will see what I mean. I do the
following, I create

> Hi folks,
> I am describing the issue as below:
[quoted text clipped - 7 lines]
>   I got error message, "...Erro convert data type nvarchar to tinyint"
> Please advise. Peter
Bruce L-C  [MVP] - 31 Oct 2006 17:21 GMT
Try again, sent before done:

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

Signature

Bruce Loehle-Conger
MVP SQL Server Reporting Services

> Hi folks,
> I am describing the issue as below:
[quoted text clipped - 7 lines]
>   I got error message, "...Erro convert data type nvarchar to tinyint"
> Please advise. Peter
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2009 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.