求助,我写了一个SQL语句但是有报错,到网上找了很多都没有办法解决

t188366570 2018-01-29 01:05:04
(case when '' = '@p3' then 'b.Id = b.Id' else 'a.code like ''%%'' or a.cardNo like ''%%''' end)
错误提示是 在使应用条件的上下文中指定了非布尔类型的表达式
...全文
742 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
轻狂小疯 2018-04-04
  • 打赏
  • 举报
回复
将拼接完成的SQL print 出来再看不就行了么?
中国风 2018-01-29
  • 打赏
  • 举报
回复
这两处改改 1.
 and c.ID = (case when /*@p4*/'' = '' then c.ID else /*@p4*/'' end)
改为
AND (@p4='' OR c.ID=@p4)
2.
and (case when '' = '@p3' then 'b.Id = b.Id' else 'a.code like ''%%'' or a.cardNo like ''%%''' end)
改为
 AND (@p3='' OR a.Code LIKE '%%' AND a.CardNo LIKE '%%')
二月十六 2018-01-29
  • 打赏
  • 举报
回复
大概这么个意思
DECLARE @str INT = 2
DECLARE @sql NVARCHAR(MAX)= 'select * from test where '
    + CASE WHEN @str = 1 THEN '1=1'
           ELSE '1=2'
      END
--PRINT ( @sql )
EXEC(@sql)
可以用PRINT输出拼接完的语句看看对不对,如果没问题用EXEC执行;楼主可以百度一下sql动态拼接
t188366570 2018-01-29
  • 打赏
  • 举报
回复
引用 3 楼 sinat_28984567 的回复:
 and (case when '' = '@p3' then 'b.Id = b.Id' else 'a.code like ''%%'' or a.cardNo like ''%%''' end)
这句有问题,这句最后得到一个字符串 'a.code like ''%%'' or a.cardNo like ''%%''',报错了,如果想动态拼接sql,前边那些select也得一起动态拼接
请问一下select那块具体要添加什么,或者有没有什么博客我去学习下,谢谢了
二月十六 2018-01-29
  • 打赏
  • 举报
回复
 and (case when '' = '@p3' then 'b.Id = b.Id' else 'a.code like ''%%'' or a.cardNo like ''%%''' end)
这句有问题,这句最后得到一个字符串 'a.code like ''%%'' or a.cardNo like ''%%''',报错了,如果想动态拼接sql,前边那些select也得一起动态拼接
t188366570 2018-01-29
  • 打赏
  • 举报
回复
引用 1 楼 z10843087 的回复:
你把完整的语句发一下,你报错应该不是这个语句报错的
select Convert(varchar(20), b.OperateDate,120) OperateDate,d.Name DeptName,a.Code VipNo,a.cardno CardNo, a.Name Name,case WHEN a.Sex=1 THEN '男' ELSE '女' END Sex,a.phone PhoneNo,c.Name SubCountName,isnull(f.Name,'') PayName, b.AMT AMT_Num,CONVERT(varchar,b.NEWAMT) NEWAMT,b.Remark Remark from VIP_Log b left join VIP_Information a on a.ID = b.VIPID left join VIP_SubCountStyles c on b.SubCountId = c.Id left join VIP_Dept d on a.DeptID = d.ID left join F_Retail e on b.orderNo = e.orderNo left join F_PayStyles f on e.PayWay = f.ID where b.action=5 and Convert(varchar(10),b.OperateDate,120)>='2017-12-01' /*@p1*/ and Convert(varchar(10),b.OperateDate,120)<='2017-12-31' /*@p2*/ and c.ID = (case when /*@p4*/'' = '' then c.ID else /*@p4*/'' end) and CONVERT(varchar(12),CONVERT(datetime,b.OperateDate),108) >= '00:00:00' /*@p6*/ and CONVERT(varchar(12),CONVERT(datetime,b.OperateDate),108) <= '23:59:59' /*@p7*/ and (case when '' = '@p3' then 'b.Id = b.Id' else 'a.code like ''%%'' or a.cardNo like ''%%''' end) and d.Name in (d.Name) 这个是完整语句
OwenZeng_DBA 2018-01-29
  • 打赏
  • 举报
回复
你把完整的语句发一下,你报错应该不是这个语句报错的

590

社区成员

发帖
与我相关
我的任务
社区描述
提出问题
其他 技术论坛(原bbs)
社区管理员
  • community_281
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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