动态WHERE语句 - SQL Server 2005

时间:2009-04-20 21:40:39

标签: sql-server-2005 tsql

我需要创建一个使用LIKE关键字过滤结果集的SQL语句。有时此值为NULL。

在T-SQL中实现的最佳方法是什么?我正在使用SQL Server 2005

4 个答案:

答案 0 :(得分:4)

取决于“未提供”的含义。如果这意味着NULL,您可以随时尝试

(
    Table.Column LIKE @myParameter
OR
    @myParameter IS NULL
)

我也发现这有时会更快。

ISNULL(Table.Column, @myParameter) = @myParameter

或者,如果从代码动态构建TSql,如果没有参数,则只省略WHERE子句的那部分,或者使用'%'填充@myParameter。

答案 1 :(得分:1)

使用coalesce!

COALESCE(filter, '%')

编辑:这可能是错误的做法,但我想这是一个选择。

答案 2 :(得分:0)

 SELECT 
 lalala
 WHERE 1=1
 and (
  value like '%'+@search+'%'
  or @search = ''
 )

虽然我不确定它会如何表现......

答案 3 :(得分:0)

就个人而言,这是我在VB / C#代码中构建SQL语句的情况,如果我没有它,就不会在最后连接LIKE子句。

我刚才所说的稍微更有趣的版本是有两个版本的预准备语句,一个有一个没有LIKE子句,并且根据需要调用适当的一个。