使用SQL Server 2008.我的存储过程中有一个输入参数叫做' @ State'。该参数基本上可以是 - 所有 - '或者可以包含要过滤的状态。
所以,如果它是 - 全部 - '我不想将@State合并到where子句中。否则,我希望根据提供的@State进行过滤。所以基本上它可能导致这个....
SELECT * FROM MyTable
WHERE Type='AAA' AND Status=@Status
或者,如果他们通过' - 全部 - '
SELECT * FROM MyTable
WHERE Type='AAA'
如何在存储过程中执行此操作?
答案 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)
除非绝对必要(或者如果业务/编码惯例要求您这样做),否则无需在存储过程中执行此操作。