存储过程如何根据不同选择执行不同的查询条件

存储过程如何根据不同选择执行不同的查询条件,例如选择字段为A,执行一段查询条件,为B,执行另一段查询条件

ALTER  proc [dbo].[usp_user]

    @produceline  varchar(10),

    @workproc  varchar(20),

    @finishid   varchar(30),

    @auitdate  datetime,

    @abtype  varchar(10)

as

declare @sql varchar(1000)

begin

    set @sql='select SUM(RpTotalNums) as 投料数 from [BMMES_JM].[dbo].[M_JOB_REPORTWORK] where '

        + 'RpProduceLine = ' + cast(@produceline as varchar)

        + 'AND RpWorkproc = ' + cast(@workproc as varchar)

        + 'AND RpFinishID = ' + cast(@finishid as varchar)

        + 'AND RpAuditStatus = 1 and RpAuditDate between convert(varchar(10),DATEADD(dd,0,'+cast(@auitdate as varchar)+'),120)+07:00 and convert(varchar(10),DATEADD(dd,1,'+cast(@auitdate as varchar)+'),120)+07:00 '

 

    if (@abtype= 'A')

        begin

            set @sql=@sql+' and RpABMaterial = ''A'' and CHARINDEX(''_'',RpERPWorkOrder)=0 '

        end

    else if (@abtype= 'B')

        begin

            set @sql=@sql+' and RpABMaterial = ''B'' '

        end

    else if (@abtype= '返花')

        begin

            set @sql=@sql+' and CHARINDEX(''_'',RpERPWorkOrder)>0 and RpABMaterial = ''A'' '

        end

    else 

        begin 

            set @sql=@sql+' and RpAuditStatus = 1 '

        end

    exec (@sql)

end


history 发布于 2019-1-7 15:18 (编辑于 2019-1-7 17:42)
1min目标场景问卷 立即参与
回答问题
悬赏:4 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共1回答
最佳回答
4
cherishdqyLv7高级互助
发布于2019-1-7 15:31(编辑于 2019-1-7 17:56)
CREATE proc [dbo].[usp_user]
    @produceline varchar(10),
    @workproc varchar(20),
    @finishid varchar(30),
    @auitdate datetime,
    @abtype varchar(10)
as
declare @sql varchar(1000)
begin
    set @sql='select SUM(RpTotalNums) as 投料数 from [BMMES_JM].[dbo].[M_JOB_REPORTWORK] where '
        + ' RpProduceLine = ' + cast(@produceline as varchar)
        + ' AND RpWorkproc = ' + cast(@workproc as varchar)
        + ' AND RpFinishID = ' + cast(@finishid as varchar)
        + ' AND RpAuditStatus = 1 and RpAuditDate between convert(varchar(10),DATEADD(dd,0,'+@auitdate+'),120) + '' 07:00'' and convert(varchar(10),DATEADD(dd,1,'+@auitdate+'),120) + '' 07:00'' '
 
    if (@abtype= 'A')
        begin
            set @sql=@sql+' and RpABMaterial = ''A'' and CHARINDEX(''_'',RpERPWorkOrder)=0 '
        end
    else if (@abtype= 'B')
        begin
            set @sql=@sql+' and RpABMaterial = ''B'' '
        end
    else if (@abtype= '返花')
        begin
            set @sql=@sql+' and CHARINDEX(''_'',RpERPWorkOrder)>0 and RpABMaterial = ''A'' '
        end
    else 
        begin 
            set @sql=@sql+' and RpAuditStatus = 1 '
        end
    exec (@sql)
end
GO


  • No1-格调 No1-格调 云姐6666
    2019-01-07 15:47 
  • history history(提问者) SELECT sum(RpAcceptCount) as 合格数,SUM(RpTotalNums) as 投料数 FROM [BMMES_JM].[dbo].[M_JOB_REPORTWORK] a left join [BMMES_JM].[dbo].[M_JOB_REPORTWORK_01] d on d.RpLPID = a.RpID where RpWorkproc = \'${gx}\' and RpProduceLine = \'${line}\' and RpFinishID =\'${choose}\' and RpAuditDate between \'${newdate}\' and \'${DATEDELTA(newdate,1)}\' and RpAuditStatus =\'1\' ${if(gdxh==\"B\",\" and RpABMaterial = \'B\' \",if(gdxh==\"A\",\" and CHARINDEX(\'_\',RpERPWorkOrder)=0 and RpABMaterial = \'A\' \",if(gdxh==\"返花\", \" and CHARINDEX(\'_\',RpERPWorkOrder)>0 and RpABMaterial = \'A\' \" , \" and RpAuditStatus =\'1\'\")))},我这样要如何变成存储过程
    2019-01-07 16:02 
  • cherishdqy cherishdqy 回复 history(提问者) 看一下补充的参考写法
    2019-01-07 16:20 
  • history history(提问者) 那我需要传进来的参数在哪里定义?
    2019-01-07 16:26 
  • cherishdqy cherishdqy 回复 history(提问者) @xh varchar(64)就是定义参数啊
    2019-01-07 16:27 
  • 3关注人数
  • 1041浏览人数
  • 最后回答于:2019-1-7 17:56
    请选择关闭问题的原因
    确定 取消
    返回顶部