zoukankan      html  css  js  c++  java
  • 在sql server中建存储过程,如果需要参数是一个可变集合怎么处理?

    在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

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

     

    调用2EXEC [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

    最终效果

     

  • 相关阅读:
    Linux网络编程头文件汇总
    CentOS7.6 源码安装 libxml2-2.8.0
    CentOS7.6 源码安装 glib-2.30.3
    CentOS7.6 源码安装 libevent-2.1.8-stable
    CentOS7.6 源码安装 zeromq-4.2.5
    CentOS7.6 源码安装 go1.13.12
    CentOS7.6 源码安装 openssl-1.1.1c
    CentOS7.6 源码安装 Python-3.7.4
    Go学习笔记:Linux下安装Go语言
    Go学习笔记:初识Go语言
  • 原文地址:https://www.cnblogs.com/dunitian/p/4501268.html
Copyright © 2011-2022 走看看