帆软报表执行存储过程如何传递if条件的参数呢?

例如我的sql是这样的:

select xxx from  xxx  where

rp.RpERPWorkOrder in (select distinct RpERPWorkOrder from dbo.M_JOB_REPORTWORK as rp left join sfb_file as sfb on sfb.SFB05 = rp.RpfinishID where sfb.PName = '${xh}' 

${if(gdh=="B"," and RpABMaterial = 'B' ",if(gdh=="A"," and CHARINDEX('_',RpERPWorkOrder)=0 and RpABMaterial = 'A'  "," and CHARINDEX('_',RpERPWorkOrder)>0 and RpABMaterial = 'A'  "))}

)   


红色字体如何写到存储过程呢?


汪成 发布于 2019-1-7 13:58 (编辑于 2019-1-7 14:56)
1min目标场景问卷 立即参与
回答问题
悬赏:4 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
cherishdqyLv7高级互助
发布于2019-1-7 16:18

试试这个

exec pro_test '${xh}','${gdh}'

CREATE PROCEDURE pro_test
(
	@xh		varchar(64)
    @gdh    varchar(64) 
)
AS
declare @sql varchar(1000)
begin
    set @sql='select xxx from xxx where rp.RpERPWorkOrder in '
		+ ' (select distinct RpERPWorkOrder from dbo.M_JOB_REPORTWORK as rp left join sfb_file as sfb on sfb.SFB05 = rp.RpfinishID where sfb.PName = ' + cast(@xh as varchar)
    if (@gdh= 'B')
        begin
            set @sql=@sql+' and RpABMaterial = ''B'''
        end
    elseif (@gdh= 'A')
        begin
            set @sql=@sql+' and CHARINDEX(''_'',RpERPWorkOrder)=0 and RpABMaterial = ''A'''
        end    
    else 
        begin
            set @sql=@sql+' and CHARINDEX(''_'',RpERPWorkOrder)>0 and RpABMaterial = ''A'''
        end
    set @sql=@sql+')'
    exec (@sql)
end
GO


最佳回答
0
myseanLv3初级互助
发布于2019-1-7 14:01(编辑于 2019-1-7 16:46)

image.png

然后选择你的数据集

image.png


点确定后


image.png


就和其他一样了

  • 汪成 汪成(提问者) 红色字体中gdh是传的参数,当传的是B时,就执行and RpABMaterial = \'B\',否则继续判断,传的时A时执行and CHARINDEX(\'_\',RpERPWorkOrder)=0 and RpABMaterial = \'A\',否则执行and CHARINDEX(\'_\',RpERPWorkOrder)>0 and RpABMaterial = \'A\' 我就是不知道这个红色字体部分如何写到存储过程中去
    2019-01-07 14:08 
  • mysean mysean 回复 汪成(提问者) exec procedure ${if(.....)} 不就是这样吗?
    2019-01-07 14:27 
  • history history 回复 mysean 具体要怎么写?
    2019-01-07 15:26 
  • 3关注人数
  • 1080浏览人数
  • 最后回答于:2019-1-7 16:46
    请选择关闭问题的原因
    确定 取消
    返回顶部