当前位置: 代码迷 >> Sql Server >> 再问where 后加条件有关问题
  详细解决方案

再问where 后加条件有关问题

热度:24   发布时间:2016-04-25 00:53:11.0
再问where 后加条件问题
sql如下:

select * from tes where  djb = case when @djb = 102 then 101 else @djb end and
                           ((@djb <> 102 and kctdj is null) or (@djb = 102 and not kctdj is null))


以上存储过程在sql里执行没有问题

但若@djb 为101时 在delphi用ADOStoredProc1打开时提示错误如下:

“数据提供程序或其他服务返回 E_FAIL 状态。”

检查后发现这个条件的问题:(@djb <> 102 and kctdj is null)

条件目的:如果@djb=102 就筛选kctdj列不为空的记录,否则就筛选kctdj列为空的记录。


请问如何修改呀?  
------最佳解决方案--------------------
“数据提供程序或其他服务返回 E_FAIL 状态。”

可能不是sql语句的问题吧,语法没问题,最多返回到 是空集,没有数据。建议再看看你的前台程序。
------其他解决方案--------------------
not kctdj is null 改為 kctdj is not null


------其他解决方案--------------------
select * from tes where  djb = case when @djb = 102 then 101 else @djb end and                           ((@djb <> 102 and kctdj is null) or (@djb = 102 and not kctdj is null)) 


抛开kctdj这个字段,你@djb <> 102或者@djb =102这个是不是有点.......
  相关解决方案