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

    最终效果

     

  • 相关阅读:
    WP7中HttpWebRequest的使用方法之GET方式
    C#使用技巧之调用JS脚本方法一
    SQL Server Date 函数之CONVERT()
    C#日期格式化和数字格式化
    C#使用技巧之调用JS脚本方法二
    Win8的RSS阅读器
    yield
    浮点类型(float、double)在内存中的存储
    从<<CSS禅意花园>>中学到的用户界面设计原则
    The First Essay
  • 原文地址:https://www.cnblogs.com/dunitian/p/4501268.html
Copyright © 2011-2022 走看看