27,579
社区成员
发帖
与我相关
我的任务
分享
a列有索引时用条件1,2可能会造成用不到索引可强制指定索引,数据量小时都可用
--1.
where a='t' AND a IS NOT NULL OR a IS NULL
--或
--2.
where ISNULL(a,'t')='t'
select * from 表 where case when 字段 is not null then 't' else t end =a
DECLARE @a VARCHAR(10)
SET @a=''
--方法1:
--使用简单,但效率不高,大部分情况下无法使用索引
SELECT * FROM [master].dbo.spt_values AS sv
WHERE ISNULL(@a,'')='' OR sv.number=@a
--方法2:
--要用到动态sql, 但能使用索引。推荐做法。
DECLARE @sql NVARCHAR(MAX)
SET @sql = 'SELECT * FROM [master].dbo.spt_values AS sv WHERE 1=1 '
IF @a>''
BEGIN
SET @sql=@sql+' and sv.number=@a '
END
EXEC sp_executesql @sql,N'@a VARCHAR(10)',@a