在sql server中建存储过程,如果需要参数是一个可变集合的处理

原存储过程,@objectIds 为可变参数,比如 110,98,99

ALTER PROC [dbo].[Proc_totalScore]

@categoryKey int,

@objectIds VARCHAR(MAX)

AS

BEGIN

     SELECT c.Name,AVG(e.Score) Score FROM dbo.Sys_com_comment_main m

     INNER JOIN dbo.sys_com_coment_extend e ON e.commentId=m.ID

     INNER JOIN dbo.sys_com_category c ON e.NameKey=c.NameKey

     WHERE m.categoryKey=@categoryKey AND m.dataStatus<>99 AND m.IsCheck=0 AND m.objectId IN(@objectIds)

     GROUP BY c.Name

END

调用1:EXEC [Proc_totalScore] 99902,'110'

调用2:EXEC [Proc_totalScore] 99902,'110,97,87'

在sql server中建存储过程,如果需要参数是一个可变集合怎么处理?

上网搜了一下大部分都是酱油贴,有网友说用xml的方式,具体的代码也没看见

折中一下,用sql拼接来实现可变参数的效果 

先举个sql拼接的例子

DECLARE @sql NVARCHAR(MAX)

SET @sql ='select 1 mmd'

EXECUTE(@sql)

 

折中后的存储过程

ALTER PROC [dbo].[Proc_totalScore]

@categoryKey VARCHAR(100),

@objectIds VARCHAR(MAX)

AS

BEGIN

DECLARE @sql NVARCHAR(MAX)

SET @sql ='SELECT c.Name,AVG(e.Score) Score FROM dbo.Sys_com_comment_main m

         INNER JOIN dbo.sys_com_coment_extend e ON e.commentId=m.ID

         INNER JOIN dbo.sys_com_category c ON e.NameKey=c.NameKey

         WHERE m.categoryKey='+@categoryKey+' AND m.dataStatus<>99 AND m.IsCheck=0 AND m.objectId IN('+@objectIds+')

         GROUP BY c.Name'

         EXECUTE(@sql)

END

最终效果

最新文章

  1. 如何阻止h5body的滑动
  2. [LintCode] 3Sum 三数之和
  3. 获取Repeater控件中的每一项数据
  4. (转)Linux下用mkisofs制作光盘镜像ISO文件
  5. [cocos2d]场景切换以及切换进度显示
  6. KDB调试内核
  7. Office2007图标变成白框,但是还能使用问题解决办法
  8. 排序算法——交换排序(冒泡排序、快速排序)(java)
  9. html行内元素,块元素,空元素
  10. MySQL意外关闭, 导致软件崩溃而无法启动的解决办法
  11. python爬虫——爬取小说 | 探索白子画和花千骨的爱恨情仇(转载)
  12. kernel pwn 入门环境搭建
  13. Oracle使用PLSQL导入数据后中文乱码的解决方法
  14. 性能测试工具 Locust
  15. JavaSE回顾及巩固的自学之路(三)——————所有语言的都存在的基本运算
  16. SpringBoot2.0+Shiro+JWT 整合
  17. CentOS5.x、CentOS6.x 使用NFS及mount实现两台服务器间目录共享
  18. MAC apache服务器搭建
  19. maven 打包zip,jsw相关
  20. VMware NAT模式多个虚拟机相互访问

热门文章

  1. Javascript - Promise学习笔记
  2. C语言 &#183; 整数平均值
  3. linux基础学习笔记
  4. CGI与FastCGI nginx+PHP-FPM
  5. 推荐一个ASP.NET网站内容管理系统源码
  6. Exception in thread &quot;main&quot; java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.&lt;init&gt;(I)V
  7. iOS之延时执行(睡眠)的几种方法
  8. 基于SOA架构的TDD测试驱动开发模式
  9. T-SQL 拆分使用指定分隔符的字符串(split string)
  10. 0042 MySQL学习笔记-入门--01