0

所以我有这个屏幕,里面有很多作为标准部分的文本框。

例子 :

输入名字:_____

输入年龄:_____

输入高度:_____

Search !

所以,查询是这样的:

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”)

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

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

有没有其他优雅的解决方案?

编辑 :

嗯……我可以用这个

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

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

4

2 回答 2

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))
于 2013-06-02T15:26:46.160 回答
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)
于 2013-06-02T15:32:20.857 回答