T-SQL:WHERE子句 - 如何根据输入变量进行调整

时间:2014-03-19 17:33:55

标签: sql sql-server tsql

使用SQL Server 2008.我的存储过程中有一个输入参数叫做' @ State'。该参数基本上可以是 - 所有 - '或者可以包含要过滤的状态。

所以,如果它是 - 全部 - '我不想将@State合并到where子句中。否则,我希望根据提供的@State进行过滤。所以基本上它可能导致这个....

SELECT * FROM MyTable
WHERE Type='AAA' AND Status=@Status

或者,如果他们通过' - 全部 - '

SELECT * FROM MyTable
WHERE Type='AAA'

如何在存储过程中执行此操作?

3 个答案:

答案 0 :(得分:3)

SELECT
    *
FROM
    MyTable
WHERE
    Type='AAA'
    AND Status = CASE @Status WHEN '--All--' THEN Status ELSE @Status END

答案 1 :(得分:1)

我以为你写了一个错字。它应该是@State,而不是@Status。这个简单的查询可能不是您要查找的内容,因为您需要在您的需求中使用两个sql语句。

SELECT * FROM MyTable
WHERE Type='AAA' AND (@State='--All--' or State=@State)

答案 2 :(得分:0)

或者...

你可以使它更简单:

 SELECT * FROM MyTable
 WHERE Type='AAA' AND @State in ('--All--', State)

除非绝对必要(或者如果业务/编码惯例要求您这样做),否则无需在存储过程中执行此操作。