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

标签 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)) 

用于填充可用参数值的数据集:

SELECT DISTINCT 
    tblNoteStore.Type, 
    lstNoteTypes.Description
FROM
    tblNoteStore 
INNER JOIN
    lstNoteTypes ON tblNoteStore.Type = lstNoteTypes.NoteTypeID
ORDER BY    
    lstNoteTypes.Description

返回此结果:

enter image description here

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

enter image description here

现在设置可用值:

enter image description here

然后,如果我运行包含多个值的报告,则会出现错误:

enter image description here

我知道发生这种情况是因为 SSRS 将多个值视为字符串,并通过逗号传递它们。

但是在这种情况下该如何解决呢?

最佳答案

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

添加数据集过滤器非常简单。唯一的缺点是效率较低。如果速度差异微不足道,那么这是一个不错的选择。 enter image description here

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

WHERE tblNoteStore.Type IN (@NoteStoreType) 

如果这不适用于您的版本,您还可以在 SQL 中使用自定义 Split 函数将逗号分隔的字符串分解为单独的值。已经有很多专门针对该特定主题的答案。

关于sql-server - 为什么在 SSRS 中传递多个整数值参数会引发转换错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42097889/

相关文章:

asp.net - Visual Studio 2015 - 报表查看器 2015 可再发行版 - 让报表查看器 "12"正常工作

reporting-services - 在 SSRS 中隐藏子报告(并且不执行存储过程)

reporting-services - 如何通过 SSRS Web 服务获取报告 URL?

delphi - 如何在参数化查询中使用 IS NULL (Delphi)

sql - 从 SQL SERVER 中的 CTE 删除行

c# - INSERT 语句与 FOREIGN KEY 约束错误冲突

sql - 想要使用Excel2010单元格列作为SQL Server 2008查询的驱动程序

python - Python 中有 "missing"函数吗?

sql - 尝试在 ubuntu 中使用 RODBC 连接到 ODBC 服务器

sql-server - 避免系统版本化表中的架构不匹配