用NULL累积查询参数?

时间:2013-06-02 15:19:51

标签: sql-server sql-server-2008

所以我这个屏幕上有许多文本框,这是标准部分。

示例:

输入姓名: _ __ _ _

输入年龄: _ __ _ _

输入高度: _ __ _ _

搜索!

所以,查询是这样的:

select * from....
where 
...
and Name = isnull(@name,Name)
and Age= isnull(@Age,Age)
and Height= isnull(@Height,Height)

一切都很好。

现在让我们说所有3个参数都是null

问题是(例如)在 Name包含null的情况下。 (db列上没有值)

所以 - 产生类似这样的东西

and Name = isnull(@name,Name)
 转换为 and Null = isnull(Null,Name)
 转换为 and Null = Null(因为列[Name]值为“null”)

这就是爆炸的地方。 (因为null!= null)

我不想使用set ansi null解决方案。

还有其他优雅的解决方案吗?

编辑:

嗯......我可以用这个

ISNULL(Name ,1) = ISNULL(@Name ,ISNULL(Name ,1))

但我不确定这是否是最佳解决方案......

2 个答案:

答案 0 :(得分:1)

您可以将SQL查询更改为以下内容:

select * from....
where 
...
and (Name = @name OR (@name IS NULL AND Name IS NULL))
and (Age = @Age OR (@Age IS NULL AND Age IS NULL))
and (Height = @Height OR (@Height IS NULL AND Height IS NULL))

答案 1 :(得分:1)

格式进行测试
@var IS NULL or @var = Column

还有其他几个原因,为什么这是一个更好的格式,但我不记得他们在我的头顶。但是你的查询最终会看起来像这样。

select * from....
where 
...
and (@name IS NULL OR @name = Name )
and (@age IS NULL OR @age = Age)
and (@height IS NULL OR @height = Height)