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

    最终效果

     

  • 相关阅读:
    突出展示案例
    下拉菜单案例
    推送人群的选择【技术篇】
    Couchbase 中的分布式储存
    开始了大概三四天的Rails学习之路
    分层架构与公司组织
    极光推送助推视频App,打造最活跃手机新媒体平台
    极光推送CTO黄鑫:技术人员要建立自己的知识图谱
    Android SDK教程
    Android消息推送 SDK 集成指南
  • 原文地址:https://www.cnblogs.com/dunitian/p/4501268.html
Copyright © 2011-2022 走看看