求助个SQL问题存储过程问题

人称猪 2011-10-09 09:04:09
ALTER PROCEDURE [dbo].[bb]
@rectime1 datetime,
@rectime2 datetime,
@bianhaoid int,
@banci int
AS
BEGIN
if (@rectime1<>0 and @rectime2<>0)
begin
SELECT bianhaoid , riqi, banci , chanpin ,
kaicheshiijan , tingcheshijian, tingchecishu ,
michang
from bcgl
where 1=1
and (riqi between @rectime1 and @rectime2 )
and (case @bianhaoid
when = 0 then 1=1
else bianhaoid = @bianhaoid
end)


and (case@banci
when = 0 then 1=1
else banci = @banci
end)
and (bcgl.kaicheshiijan<>'' )
end
END



提示
消息 102,级别 15,状态 1,过程 bb,第 1 行
'=' 附近有语法错误。



问题出现在case那 不知道怎么改。。
求助大神,在线等
...全文
124 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
zk11223344 2011-10-09
  • 打赏
  • 举报
回复
应该这样写,绝对可以

and bianhaoid =(case @bianhaoid
when 0 then bianhaoid
else @bianhaoid
end)

浪子-无悔 2011-10-09
  • 打赏
  • 举报
回复
Case具有两种格式。简单Case函数和Case搜索函数。
--简单Case函数
CASE sex
WHEN '1' THEN '男'
WHEN '2' THEN '女'
ELSE '其他' END
--Case搜索函数
CASE WHEN sex = '1' THEN '男'
WHEN sex = '2' THEN '女'
ELSE '其他' END

这两种方式,可以实现相同的功能。简单Case函数的写法相对比较简洁,但是和Case搜索函数相比,功能方面会有些限制,比如写判断式。
还有一个需要注意的问题,Case函数只返回第一个符合条件的值,剩下的Case部分将会被自动忽略。
--比如说,下面这段SQL,你永远无法得到“第二类”这个结果
CASE WHEN col_1 IN ( 'a', 'b') THEN '第一类'
WHEN col_1 IN ('a') THEN '第二类'
ELSE'其他' END
li611265893 2011-10-09
  • 打赏
  • 举报
回复
when '0' then '1'
人称猪 2011-10-09
  • 打赏
  • 举报
回复
试了,还是同样的错误。
晕死

[Quote=引用 5 楼 naonaoye 的回复:]

when '0' then 1=1
[/Quote]
小心眼 2011-10-09
  • 打赏
  • 举报
回复
when 0 就可以了
人称猪 2011-10-09
  • 打赏
  • 举报
回复
师傅,我QQ上有问你这个问题的。


问题是默认的用户查询是bianhaoid、banci为空,也就是所有的数据都出来,如果用户提供了参数的话就按参数选择。

如果在之前加判断用户是否提供参数的话那就要分
1、bianhaoid为空banci不为空、
2、bianhaoid不为空banci为空、
3、bianhaoid为空banci为空。
如果我以后再加查询条件的话那就要加更多的else if了

我是这样想的

[Quote=引用 6 楼 new_fengzi 的回复:]

if (@rectime1<>0 and @rectime2<>0)
既然你用逻辑判断 那你为什么还不跟你上面的用法一样呢

引用 4 楼 lonelypig1 的回复:
引用 2 楼 longlong881129 的回复:

when = 0 then 1=1
你when =0 这个语法有误


那怎么改呢?
[/Quote]
new_fengzi 2011-10-09
  • 打赏
  • 举报
回复
if (@rectime1<>0 and @rectime2<>0)
既然你用逻辑判断 那你为什么还不跟你上面的用法一样呢

[Quote=引用 4 楼 lonelypig1 的回复:]
引用 2 楼 longlong881129 的回复:

when = 0 then 1=1
你when =0 这个语法有误


那怎么改呢?
[/Quote]
naonaoye 2011-10-09
  • 打赏
  • 举报
回复
when '0' then 1=1
人称猪 2011-10-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 longlong881129 的回复:]

when = 0 then 1=1
你when =0 这个语法有误
[/Quote]

那怎么改呢?
人称猪 2011-10-09
  • 打赏
  • 举报
回复
我试过这种case的方式,还是一样的错误
我在想是不是where条件里面的case语句不能以参数为条件。
大神有试过这样的写法吗


[Quote=引用 1 楼 net_lover 的回复:]

应该这样吧?
and (case
when @bianhaoid= 0 then 1=1
else bianhaoid = @bianhaoid
end)
[/Quote]
酷儿 2011-10-09
  • 打赏
  • 举报
回复
when = 0 then 1=1
你when =0 这个语法有误
孟子E章 2011-10-09
  • 打赏
  • 举报
回复
应该这样吧?
and (case
when @bianhaoid= 0 then 1=1
else bianhaoid = @bianhaoid
end)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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