请问存储过程怎么设置下拉框不选选择全部,或者不选指定默认值。

存储过程卸载数据库里面,无法使用sql语句那种参数为空选择全部,请问存储过程怎么实现那种效果。

image.png

image.png

FineReport 良月二三 发布于 2021-1-28 14:37 (编辑于 2021-1-28 16:08)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共3回答
最佳回答
0
shirokoLv6资深互助
发布于2021-1-28 16:06

image.png

EXEC db.proc_shou_zhi @stamont='${if(len(sta)=0,"-1",sta)}' ,@endmont='${if(len(end)=0,"99",end)}'


最佳回答
0
小县城Lv4见习互助
发布于2021-1-28 14:39

那你就用单选框呗。干啥要用多选的呢。

最佳回答
0
烟尘Lv6高级互助
发布于2021-1-28 14:39(编辑于 2021-1-28 14:40)

存储过程加if判断,sql用字符串拼接

例如:

CREATE PROCEDURE ST_ShowRoomByCatgAndStatus2(
                         @RCategoryId int,@Status int)
 AS
 DECLARE @str   nvarchar(1000)
set @str=''--要赋初值,不然为NULL
 if @RCategoryId!=0
 BEGIN
 SET @str =  @str + '  and r.ST_RCategoryId=' + rtrim(@RCategoryId)--转为字符型再相加
 END
 if @Status!=0
 BEGIN
 SET @str = @str + '  and s.ST_Status='  + rtrim(@Status)
 END
 
select @str='
       select     r.ST_RoomId, c.ST_Name,s.ST_Status
       from         ST_RoomsInfo r, ST_RoomCategory c, ST_RoomStatus s
       where      s.ST_RoomId=r.ST_RoomId
                       and c.ST_RCategoryId=r.ST_RCategoryId '+ @str
exec(@str)
GO


  • 良月二三 良月二三(提问者) 这种方法知道的,主要sql比较复杂,一百多行,要用if方法要判断三次,语句要写三四百行,我就问问有没有在帆软中能判断的
    2021-01-28 15:09 
  • 烟尘 烟尘 回复 良月二三(提问者) 除非帆软判断len(参数)==0的时候传全部的条件使sql能查询全部,如果不好写的话可以考虑在过程里把不用where的地方写成视图,然后在视图上拼串加where判断
    2021-01-28 15:15 
  • 良月二三 良月二三(提问者) 回复 烟尘 您好,您是对的,之前是我理解错了,用了您这种方法除了一个问题,我上传了照片,您看看什么情况
    2021-01-28 16:01 
  • 烟尘 烟尘 回复 良月二三(提问者) 改成varchar(max)
    2021-01-28 16:13 
  • 良月二三 良月二三(提问者) 回复 烟尘 开始定义的就是varchar(max),不行,不知道怎么回事
    2021-01-28 16:25 
  • 4关注人数
  • 562浏览人数
  • 最后回答于:2021-1-28 16:08
    请选择关闭问题的原因
    确定 取消
    返回顶部