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个不同的参数。只需单引号,并照顾好您的参数。