我在where子句中有这个陈述:
(A.[subject] LIKE '%'+@meetingSubject+'%')
如果@meetingSubject
不为空,我只希望搜索此内容。
截至目前,它在@meetingSubject
为空时返回所有记录
我怎样才能做到这一点?
答案 0 :(得分:2)
问题是"空"而不是" NULL"。如果值为NULL
,则表达式将失败,并且不会返回任何记录。这不是OP描述的行为。因此,我认为你正在寻找:
(A.[subject] LIKE '%'+@meetingSubject+'%' AND @meetingSubject <> '')
答案 1 :(得分:1)
case也不仅仅在NULL为空时排除空字符串
(ISNULL(@meetingSubject, '') <> '' and A.[subject] LIKE '%'+@meetingSubject+'%')
答案 2 :(得分:0)
http://msdn.microsoft.com/en-us/library/ms188795.aspx
这可能会做你想要的:
( @meetingSubject IS NOT NULL and @meetingSubject != '' and A.[subject] LIKE '%'+@meetingSubject+'%')
答案 3 :(得分:0)
这应该是一种更清洁的方法,但Gordon Linoff answer would work as well
A.[Subject] like '%' + NULLIF(@meetingSubject, '') + '%'
可读性以来的清洁。
答案 4 :(得分:-2)
我不认为@meetingSubject为空 我认为@meetingSubject是'' 在TSQL中它是不一样的
第一个@var = null;没有找到。
declare @var varchar(100)
declare @search varchar(100)
set @search = 'searchvaluesting'
set @var = null;
select '%' + @var + '%';
select 'found' where @search like '%' + @var + '%'; -- returns nothing
select 'found' where @search like '%' + @var + '%' and @var <> ''; -- returns nothing
set @var = '';
select '%' + @var + '%';
select 'found' where @search like '%' + @var + '%' and @var <> ''; -- returns nothing
set @var = ' ';
select '%' + @var + '%', LEN(@var);
select 'found' where @search like '%' + @var + '%' and @var <> ''; -- returns nothing
set @var = 'value';
select '%' + @var + '%';
select 'found' where @search like '%' + @var + '%' and @var <> ''; -- returns found