Sql server 为什么在SSRS中传递多个整数值参数会引发转换错误?

Sql server 为什么在SSRS中传递多个整数值参数会引发转换错误?,sql-server,reporting-services,parameters,int,Sql Server,Reporting Services,Parameters,Int,我的程序是这样的,非常简单 ALTER PROCEDURE dbo.MyProcedure @NoteStoreType INT AS SELECT Column1, Column2, Column3 FROM tblNoteStore WHERE tblNoteStore.Type IN (COALESCE(@NoteStoreType, tblNoteStore.Type)) 要填充可用参数值

我的程序是这样的,非常简单

ALTER PROCEDURE dbo.MyProcedure
    @NoteStoreType INT 
AS 
    SELECT 
        Column1, Column2, Column3  
    FROM  
        tblNoteStore
    WHERE 
        tblNoteStore.Type IN (COALESCE(@NoteStoreType, tblNoteStore.Type)) 
要填充可用参数值的“我的数据集”:

SELECT DISTINCT 
    tblNoteStore.Type, 
    lstNoteTypes.Description
FROM
    tblNoteStore 
INNER JOIN
    lstNoteTypes ON tblNoteStore.Type = lstNoteTypes.NoteTypeID
ORDER BY    
    lstNoteTypes.Description
返回此结果:

然后我转到报告参数属性以允许多个值:

现在设置可用值:

然后,如果我使用多个值运行报告,它会给我一个错误:

我知道这是因为SSRS将多个值视为字符串,通过逗号传递


但是在这种情况下需要解决什么问题呢?

存储过程中的参数
@NoteStoreType INT
是单个整数,而不是整数值列表。您应该尝试使用动态查询:

CREATE PROCEDURE dbo.MyProcedure
@NoteStoreType NVARCHAR(2048) 
AS
BEGIN

  DECLARE @cmd NVARCHAR(MAX)

  SET @cmd = 'SELECT Column1, Column2, Column3 
              FROM  tblNoteStore
              WHERE tblNoteStore.Type IN (' + @NoteStoreType + ')';

  EXEC (@cmd);

END
GO

检查这里:

我尽量避免使用动态SQL,因为它更难维护。您可以在SQL中将此参数作为筛选器应用,也可以在查询运行后在数据集级别应用它

添加数据集过滤器非常简单。唯一的缺点是效率较低。如果速度差很小,这是一个很好的选择。

在某些版本的SSRS中,您可以在SQL中使用常规的
In
语句:

WHERE tblNoteStore.Type IN (@NoteStoreType) 

如果在您的版本中不起作用,还可以在SQL中使用自定义拆分函数将逗号分隔的字符串拆分为单个值。已经有很多关于该特定主题的答案。

请显示主报告数据集查询。你说这只适用于一个值?谢谢。好主意,但我的程序比我发布的要大得多。它也有6个不同的参数。只需单引号,并照顾好您的参数。