where条件为null的问题

ajdkjalj 2018-12-05 04:15:09


做了个报表,在查询条件不输入时,就显示全部数据,现在发现where条件值本身为null时就查不出来,如图1,edu.vschool为null,where条件就相当于edu.vschool=null,而sqlserver又不支持这种写法,有什么好的方法,求解答
...全文
1093 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
吉普赛的歌 2018-12-05
  • 打赏
  • 举报
回复
declare @school nvarchar(100)= N'%四川%'  --如果有传入参数,%直接拼在参数中
DECLARE @sql nvarchar (MAX)               --应该定义为 nvarchar(max),你的 100 长度不够
set @sql='
select * from hr_hi_person p left join hr_hi_edu edu 
	on edu.cPsn_Num=p.cPsn_Num 
where 1=1 '
+(case when isnull(@school,'')!='' then ' and edu.vschool like @school ' else '' end) 

--打印出来,观察实际的sql是否正确
PRINT @sql
--执行
EXEC sp_executesql @sql, N'@school nvarchar (100)',@school
ajdkjalj 2018-12-05
  • 打赏
  • 举报
回复
说"."附近有语法错误
ajdkjalj 2018-12-05
  • 打赏
  • 举报
回复
引用 3 楼 吉普赛的歌 的回复:
用 or 可能会不走索引, 建议动态sql :
declare @school nvarchar(100)=''
declare @sql nvarchar(max)
set @sql='select * 
from hr_hi_person as p
left join hr_hi_edu edu
on edu.cPsn_Num=p.cPsn_Num
where
1=1
and p.cPsn_Num='X001'
'
+
(case when @school>'' then ' edu.vschool=@school ' else '' end)

EXEC sp_executesql @sql,N'@school nvarchar(100)',@school

始终报这个错,把字符串单独提出去又可以执行,我找不出哪错了啊
吉普赛的歌 2018-12-05
  • 打赏
  • 举报
回复
少了单引号:
declare @school nvarchar(100)=''
declare @sql nvarchar(max)
set @sql='select * 
from hr_hi_person as p
left join hr_hi_edu edu
on edu.cPsn_Num=p.cPsn_Num
where
1=1
and p.cPsn_Num=''X001''
'
+
(case when @school>'' then ' edu.vschool=@school ' else '' end)

EXEC sp_executesql @sql,N'@school nvarchar(100)',@school

吉普赛的歌 2018-12-05
  • 打赏
  • 举报
回复
用 or 可能会不走索引, 建议动态sql :
declare @school nvarchar(100)=''
declare @sql nvarchar(max)
set @sql='select * 
from hr_hi_person as p
left join hr_hi_edu edu
on edu.cPsn_Num=p.cPsn_Num
where
1=1
and p.cPsn_Num='X001'
'
+
(case when @school>'' then ' edu.vschool=@school ' else '' end)

EXEC sp_executesql @sql,N'@school nvarchar(100)',@school

二月十六 2018-12-05
  • 打赏
  • 举报
回复
这样试试
WHERE (@school = '' OR edu.vschool=@school)
  • 打赏
  • 举报
回复
空字符串不等于null。 null 不能用=来比较。

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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