将SSRS中的多个值参数传递给存储过程

 发酵床养殖菌种 发布于 2023-01-10 10:14

我试图将多值字符串参数传递给SQL Server 2012存储过程中的表类型参数.我将此代码粘贴到SSRS的数据集中:

DECLARE @mylist clinic_list_tbltype
INSERT @mylist(n) VALUES (@pm_ChooseClinics)
EXEC sp_Skillset_Summary_With_Callbacks_Report @mylist, @pm_ChooseInterval, @pm_StartDateTime, @pm_EndDateTime

clinic_list_tbltype是我用一个名为"n"的varchar(50)字段创建的表类型.我可以像这样从SSMS调用这个存储过程(它会很快恢复):

DECLARE @mylist clinic_list_tbltype
INSERT @mylist(n) VALUES ('clinicA'), ('clinicB')
EXEC sp_Skillset_Summary_With_Callbacks_Report  @mylist, 'Daily', '6/3/2014', '6/9/2014'

我只能在SSRS中运行一个诊所(但速度非常慢),但如果我尝试不止一个,就会出错

INSERT语句中的列数少于Values子句中指定的值

.即使运行一个clnic它也可以运行,但与在SSMS中运行查询相比,它需要非常长的时间.比如2分钟对1秒.一定是因为我正在通过('clinicA','clinicB')而不是('clinicA'),''clinicB').

怎么做?

1 个回答
  • 对,我需要先给你一些背景.

    当您允许SSRS参数选择多个值时,选择多个值会将逗号分隔的值字符串创建为一个字符串

      'value1,value2,value3'
    

    要使用IN运算符检查字符串中的值,我们需要使用逗号连接的字符串.

      'value1','value2','value3'
    

    你的过程

    现在在您的proc中,当您显式插入值时,它会在表中插入多个值.

      INSERT INTO Table_Value_Param
      VALUES ('value1'),       --<-- 1st value/Row
             ('value2'),       --<-- 2nd Value/Row
             ('value3')        --<-- 3rd Value/Row
    

    这会让你回到预期的结果,就像你在程序中执行一个语句一样

    SELECT * 
    FROM Table_Name
    WHERE ColumnName IN (SELECT ColumnName 
                         FROM Table_Value_Param)
    

    另一方面,当您尝试使用SSRS报告参数插入表时,您的表插入值如

      INSERT INTO Table_Value_Param
      VALUES ('value1,value2,value3')   --<-- One Row/Value containing all the values comma separated
    

    TVP在这种情况下创建并没有真正帮助,我所做的是dbo.Split()在我的程序中使用函数.

    您可以在线找到许多分离功能的定义,有些很酷的定义请看这里 Split Function equivalent in tsql?

    一旦你创建了这个split函数,只需在你的过程定义中使用这个函数,你甚至不需要Table值参数.

    像这样......

      SELECT * 
      FROM Table_Name 
      WHERE ColumnName IN ( 
                           SELECT Value
                           FROM dbo.Split(@Report_Param, ',')
                           ) 
    

    2023-01-10 10:17 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有