【发布时间】:2019-04-09 19:13:13
【问题描述】:
我正在创建一个使用两个多值参数的存储过程:
@Class AS VARCHAR(5),
@Service AS VARCHAR(5)
(…)
WHERE B.UTRCLS IN (@Class) AND B.UTSVC IN (@Service)
当两个参数只包含一个值时,该过程可以正常工作。但是,当其中一个或两个都使用多个值时,会引发错误。
在报告生成器中,错误如下:
无法读取数据集 DataSet1 的下一个数据行 (rsErrorReadingNextDataRow)
在 SQL Server 中,错误显示如下(长度被截断):
无法执行查询“SELECT Col1009、Col1010、Col1008、Expr1003、Expr1004 来自(选择 Col1009,Tbl1001.UTCSNM Col1008,Col1010,SUM(Col1016) Expr1003,SUM(Col1014) Expr1004 FROM (…)
我不认为我在声明参数时做错了什么。这是存储过程中多值参数的问题吗?
【问题讨论】:
-
@Class被定义为varchar(5);那永远不会持有多个值。对于 SP,如果你想传递多个值,你会(通常)使用用户定义的表值数据类型 -
参数不像你想象的那样工作。存储过程参数始终是单值的。如果 UTSVC 是一个 int 列,并且您尝试将字符串 '1, 2' 传递给参数 @Service,那么 SQL Server 将简单地抱怨 '1, 2' 不能转换为(单个)整数值
-
有很多关于在SSRS中使用多值参数和存储过程源的教程。在幕后,SSRS 将创建一个包含所选值的 CSV 列表的单个字符串,并将其传递给您的过程。 One example
标签: sql-server reportbuilder3.0 sql-server-2017