如何在SQL Server查询中提供从前端搜索的功能

时间:2014-11-13 12:36:52

标签: sql asp.net sql-server

我有一个asp.net应用程序。所需的功能是:

下面有1个下拉列表和一个gridview。首次加载页面时,下拉列表中未选择任何内容。查询的工作方式如下:

Select * from myTable;

然后,当我们从下拉列表中选择某些内容时,查询为:

Select * from myTable where Col1 = @valueSelected

我想对这两种情况使用单一查询,即

SELECT * FROM myTable
Where
Case @valueSelected WHEN NULL THEN Col1 IN ('ALL', 'PASSED', 'FAILED') ELSE Col1 = @valueSelected END

SELECT * FROM myTable
Where
Case @valueSelected WHEN NOT NULL THEN Col1 = @valueSelected ELSE NULL END

但两者现在都不起作用。

任何帮助/建议/指针?

2 个答案:

答案 0 :(得分:2)

用于在If else condition子句中使用Case statement模拟where的语法用法是错误的。

如果您需要来自Col1的特定值列表,请尝试此操作。

SELECT *
FROM   myTable
WHERE  ( Col1 IN ( 'ALL', 'PASSED', 'FAILED' )
         AND @valueSelected IS NULL )
        OR col1 = @valueSelected 

如果您希望获得col1中的所有值,请尝试此操作。

Select * from myTable where Col1 = coalesce(@valueSelected,Col1)

答案 1 :(得分:1)

试试这个。

从myTable中选择*,其中Col1 = ISNULL(@ valueSelected,Col1)