在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

最终效果

转载于:https://www.cnblogs.com/dunitian/p/4501268.html

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

  1. [翻译]使用C#创建SQL Server的存储过程(Visual Studio 2005 + SQL Server 2005)

    原文地址:http://www.dotnetbips.com/articles/70eff218-3da0-4f6f-8f8d-eeea65193f2c.aspx[原文×××] [翻译]使用C#创建S ...

  2. SQL Server分页存储过程实践(图解)

    下面来对SQL Server分页存储过程进行一下实做.图解成功的各个步骤. 一 找到大数据量的示例表 分页都是针对大记录数的表:反之有大记录数的表,可能就需要分页.例如银行用户表,就会上千万.下面先做 ...

  3. Sql Server 中存储过程的output return的区别

    看http://zxianf.blog.163.com/blog/static/301207012009114104124969/中片关于Sql Server中存储过程output和return值的区 ...

  4. 实验8 SQL Server 的存储过程

    实验8 SQL Server 的存储过程 一.实验目的 1.掌握使用T-SQL编程的方法 2.掌握使用T-SQL语句创建一个存储过程并验证 3.掌握创建和执行带参数的存储过程 4.熟练使用系统存储过程 ...

  5. 易语言 存储过程 mysql_在易语言中调用MS SQL SERVER数据库存储过程(Transact-SQL)方法总结...

    作者:liigo 日期:2010/8/25 Microsoft SQL SERVER 数据库存储过程,根据其输入输出数据,笼统的可以分为以下几种情况或其组合:无输入,有一个或多个输入参数,无输出,直接 ...

  6. SQL Server数据库-存储过程(第一讲)

    先上代码 --///[存储过程] --1.新建存储过程/*---检查是否存储过程是否已存在---*/ IF EXISTS (SELECT * FROM sysobjects WHERE name = ...

  7. SQL Server数据库存储过程——以自定义存储过程为例

    SQL Server数据库存储过程--以自定义存储过程为例 1.什么是数据库存储过程 存储过程就是预编译SQL语句的集合,这些语句存储在一个名称下并作为一个单元处理.存储过程代替了传统的逐条执行SQL ...

  8. 使用SpringBoot+MybatisPlus框架的后端项目调用SQL Server的存储过程时报错

    在使用SpringBoot+MybatisPlus框架的后端项目调用SQL Server的存储过程时报错: Mapper层xml中的代码为: 在命令行调用存储过程时,可以顺利执行,但是在mapper中 ...

  9. VB实现SQL Server 2000存储过程调用

    VB实现SQL Server 2000存储过程调用 幸运好时机,注册赢手机 2005 三星yepp夏季数码旅游风 [文章信息] 作者: 刘兴权 陈奇 吴兵 刘雪松 时洪飞 时间: 2005-05-19 ...

最新文章

  1. Linux01-基本操作与Shell
  2. 京东涉足快递业加剧行业动乱
  3. 窄带信号和宽带信号的区别和联系
  4. win下svn常用操作笔记
  5. Python 基础 - Day 2 Learning Note - 字符转编码操作
  6. 我的vim配置---jeffy-vim-v2.3.tar
  7. hexo+github+hexo-theme-matery搭建个人免费博客
  8. PHP 中Cookie和Session的使用
  9. Android连接网络立即同步时区
  10. P4777 【模板】扩展中国剩余定理(EXCRT)
  11. Json 与 JS对象的关系与转换
  12. Flink SQL 系列 | 5 个 TableEnvironment 我该用哪个?
  13. cant find python executable_gyp ERR! stack Error: Can't find Python executable 'python'
  14. java jpa 教程 查询_Spring Boot JPA 使用教程
  15. UIApplication
  16. unity3d 人物对话_RPG角色对话编辑器系统RPG Conversation/Dialogue Editor 1.2.0
  17. Servlet3异步原理
  18. 生成 Bingo 卡片
  19. 简单的WGS84转UTM程序[C++]
  20. 历年诺贝尔生理学或医学奖

热门文章

  1. 关于cocos2d的下载和安装
  2. linux忘记root密码的两种修改方法
  3. DataTable、DataView、ListBox 数据绑定与查询
  4. 配置ISA Server 2006 ×××使用户轻松连接内网
  5. AndoridSQLite数据库开发基础教程(4)
  6. 网络数据包信息收集工具ferret-sidejack
  7. SQLite中特殊的INSERT语句
  8. rstudio怎么安装ggplot2_如何基于ggplot2构建相关系数矩阵热图
  9. oauth password模式_史上最干的Oauth案例分析
  10. c语言20字节的内存的数据怎么读取_C++编程-内存对齐