报表知识库
我要提问

sqlserver数据库的数据集参数过多的解决办法

sqlserver数据库的数据集参数过多的解决办法

需求背景:

一些客户在使用报表的过程中发现,如果报表使用的数据库是sqlserver的,而且数据集中使用的参数过多,超过了2100了,那么在计算报表的时候就会出现报错:传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确。此 RPC 请求中提供了过多的参数。最多应为 2100。执行错误,SQL参数异常或者SQL语句语法错误。这种情况一般是因为数据集中接收了一个元素很多的字符串组。在数据集计算时要把这个字符串组中的每一个元素解析成一下参数(即数据集中的?),由于sqlserver的自身机制问题,自身只支持2100个参数,参数

 

再多就会报上面的错误。

实现思路:

可以把sql中接收参数的部分写到宏里面,这样就不用在数据集中把每个元素对应成一个问

号,当成多个参数解析了。可以直接在宏中把参数的值对应的替换过来。

 

实现过程:

如果在数据集中直接使用字符串组接收参数,会在数据集中会把字符串组的每一个元素都解析成一个参数。可以制作下面一张报表测试一下:

然后输入参数的值为:10523,10524,10525,10526,10527

预览报表,可以看到后台打印的信息出现了好多个参数(好多个?),如下图所示:

 

使用宏代替在数据集中设置参数,直接在宏中接收参数,并拼接成一个字符串在交给数据集计算,这样就不用经过数据集做参数转换了。

 

制作一张如下图所示的报表,把数据集的过滤条件都写在了宏里面。

 

报表参数的设置如下图所示:

 

 数据集的写法如下图所示:

 

此时预览报表输入参数值为10523,10524,10525,10526,10527(因为此处不便找到2000多个参数),然后预览报表,可以看到如下图的效果,数据集后面的条件并没有经过数据集转换直接是一个写死的字符串,这是就不会经过数据库去转参数了,所以也就不会报 RPC 请求中提供了过多的参数。最多应为 2100的错误了。

 

这样就很好的避免了数据集中参数过多会在数据库中报错的问题。