sqlserv存储过程,字符串参数为null值,会当做\\\'null\\\',能不能为null时去掉引号?

exec MO_Report_MInventory_Proceduer '${starttime}','${endtime}',${MoCode},${DocnoLine},'${ItemCode}'

调用存储过程,共5个参数,其中两个时间参数是必选,想让另外三个参数为空时查询全部值,但是字符串参数ItemCode下拉框为null时,会当做'null',怎么样可以变成null,或者有什么其他更好的方法?

exec MO_Report_MInventory_Proceduer '2022-12-01','2022-12-31',null,null,null

是可以查出时间范围内全部的。

image.png

去掉这个参数的引号,查询报错:

image.png

FineReport SQL IceBall09 发布于 2023-1-29 14:56 (编辑于 2023-1-29 15:01)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
Z4u3z1Lv6专家互助
发布于2023-1-29 15:15

可以在存储过程中判断

假设 你的存储过程是

PROCEDURE MO_Report_MInventory_Proceduer @starttime date,@endtime date,@MoCode nvarchar(100),@DocnoLine nvarchar(100),@ItemCode nvarchar(100)

DECLARE @SQL_ nvarchar(max)

set @SQL_='WHERE 开始日期>=''+CONVERT(NVARCHAR(20),@starttime)+'' AND  开始日期<=''+CONVERT(NVARCHAR(20),@endtime)+'''

if (isnull(@MoCode,'')='') begin

   set @SQL_=@SQL_

end

else begin

     set @SQL_=CONCAT(@SQL_,' AND MoCode=''+CONVERT(NVARCHAR(20),@MoCode)+''')

end

if (isnull(@DocnoLine,'')='') begin

    set @SQL_=@SQL_

end

else begin

     set @SQL_=CONCAT(@SQL_,' AND DocnoLine=''+CONVERT(NVARCHAR(20),@DocnoLine)+''')

end

if (isnull(@ItemCode,'')='') begin

    set @SQL_=@SQL_

end

else begin

     set @SQL_=CONCAT(@SQL_,' AND ItemCode=''+CONVERT(NVARCHAR(20),@ItemCode)+''')

end

-----------

EXEC 存储过程的时候后面三个参数直接传空值不传NULL

最佳回答
0
snrtuemcLv8专家互助
发布于2023-1-29 14:58(编辑于 2023-1-29 15:03)

把这个参数的引号去掉

exec MO_Report_MInventory_Proceduer '${starttime}','${endtime}',${MoCode},${DocnoLine},${ItemCode}

===================================

exec MO_Report_MInventory_Proceduer '${starttime}','${endtime}',${MoCode},${DocnoLine},${if(len(ItemCode)=0,null,"'"+ItemCode+"'")}

还不行,就不知道了。。。

  • IceBall09 IceBall09(提问者) 去掉就查不出了,可以看看我去掉的报错,我放上面
    2023-01-29 15:00 
  • snrtuemc snrtuemc 回复 IceBall09(提问者) 拿给成if判断试试没看修改答案
    2023-01-29 15:02 
  • IceBall09 IceBall09(提问者) 回复 snrtuemc 现在修了 if ?
    2023-01-29 15:03 
  • snrtuemc snrtuemc 回复 IceBall09(提问者) 是的,最后一个用了if判断,看行不行
    2023-01-29 15:15 
  • IceBall09 IceBall09(提问者) 回复 snrtuemc 可惜不行
    2023-01-29 15:15 
  • 1关注人数
  • 262浏览人数
  • 最后回答于:2023-1-29 15:15
    请选择关闭问题的原因
    确定 取消
    返回顶部