SQL-server存储过程传参匹配问题,紧急求助,解答疑惑~

fff999278263676 2015-06-04 12:55:45
create proc testok
@proveID int ,
@confirmProveID int
as
select * from orders where
(proveID=@proveID or @proveID is null or @proveID ='') and
(confirmProveID=@confirmProveID or @confirmProveID is null or @confirmProveID ='')
go

例如上面的存储过程 exec testok 0,0
结果显示:全部查询出来了
看来存储过程把@proveID 和@confirmProveID 都为空‘’查询出的结果返回的
虽然我有解决办法,但是很麻烦。
因为这个表 增加的时候,默认proveID 和confirmProveID 为0,只要改为默认为-1即可
但我不明白的是为什么会把0编译成空,有没有别的有效方法

因为这是多列交互查询,所以 @proveID ='' 还得必须存在
...全文
139 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
caoyang0299 2015-06-05
  • 打赏
  • 举报
回复
有参数就按参数查,没输参数就查所有是这意思把,or后面是空=空,也就是查所有,参数类型不对,转换一下把
习惯性蹭分 2015-06-04
  • 打赏
  • 举报
回复

select convert(int,'')
楼主查下这个的结果就明白了。
shoppo0505 2015-06-04
  • 打赏
  • 举报
回复
楼主想如何查找阿?查找条件是什么?看不懂 如果你觉得你的代码有问题,那就用文字描述一下查找方式。你贴一段自己都认为不对的代码,又不描述要求的结果,让别人怎么帮你?
还在加载中灬 2015-06-04
  • 打赏
  • 举报
回复
你错了,不是把0转换为空,是把''转化为0了

另外,这个参数@proveID是整型,你拿它去空字符串,比较干嘛呢

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧