让说我有这个表,简单的SELECT查询不EqualTo一个价值
A B
-------
1 A
2 C
3 A
4 NULL
5 B
6 A
我只有在存储过程的参数。我需要传递一个参数@param
。我需要选择所有等于A
的行或选择不等于A
的所有行。我只有一个参数@param
。如果@param
= 'A' 与选择A的所有行如果@param
<> 'A' 选择具有不等于所有行A.
编辑:
这里是1点的方法,我已经找到。 不确定哪个方法是最好的一个。
DECLARE @Param VARCHAR(5)='NOt A'
DECLARE @tbl TABLE(A INT,B VARCHAR(5))
INSERT INTO @tbl(A,B)
VALUES
(1,'A'),
(2,'C'),
(3,'A'),
(4,NULL),
(5,'B'),
(6,'A')
SELECT *
FROM @tbl
WHERE 1 =
(
CASE WHEN @param = 'A'
THEN
(
CASE WHEN B = 'A' THEN 1 ELSE 2 END
)
ELSE
(
CASE WHEN (B IS NULL OR B <> 'A') THEN 1 ELSE 2 END
)
END
)
@marc_s,从应用程序中传递。应用程序只传递A或不A – user960567 2012-02-10 07:46:41
选择等于'A'或不等于'A'的所有行将导致选择所有行。这是你真正想要的吗? – TPete 2012-02-10 07:47:56
@TPete,当应用程序通过A时,我需要选择所有行与A,反之亦然 – user960567 2012-02-10 07:48:44