对可变数量的参数进行搜索sql查询的最佳方法

时间:2012-01-11 09:37:13

标签: sql sql-server sql-server-2008 tsql

  

可能重复:
  Conditional Check in Where clause

我可以提供一些参数来搜索表中的数据:

- DateFrom
- DateTo
- Name
- TypeId

我有一个我需要改进的代码。在应用程序代码中,我有一个函数可以获取所有这些参数,并根据我使用IF语句提供的参数构建不同的查询。
我想知道有更好的方法吗?
只使用参数进行一次查询,如果没有参数则忽略它 所以我不必这样做:

select...where DateFrom = 'someDate'
select...where DateFrom = 'someDate' and DateTo = 'someDate'
select...where DateFrom = 'someDate' and DateTo = 'someDate' and Name = 'someName'
etc.

2 个答案:

答案 0 :(得分:3)

尝试非常简单的方法,假设您的参数名称为@ Begin,@ End,@ Name:

select...
where 
    (@Begin IS NULL OR DateFrom = @Begin) 
and (@End is NULL OR DateTo = @End)
and (@Name is NULL OR Name = @Name)
...

然后,如果您将参数的值传递为NULL - 那么查询将跳过它

答案 1 :(得分:0)

使用通用的util类来控制它
getSqlParams(String dateFrom)
getSqlParams(String dataFrom,DateTo)

等等。也许可以帮助你。因为不同的参数意味着不同的维度 使用If真是太难看了。 :(