我想在WHERE中使用CASE,所以如果countryId为-1则不选择任何,如果是,则选择值 这是我的非工作代码
DECLARE @countryId int=-1 --for example
SELECT * FROM dbo.bbmf WHERE status=1
AND countryId =
CASE WHEN @countryId = -1 THEN
--select any
ELSE
countryId=@countryId
END
感谢您的帮助
答案 0 :(得分:2)
你的问题不明确,所以我看到了你想要达成的两个结果。
首先仅取决于countryID
。因此,如果countryID
为-1,则不要选择任何记录:
如果你没有countryId
是-1,那么你可以使用这个简单的选择,因为,如果@countryID = -1
,什么都不会返回(因为AND),如果它不是-1,那么所需的记录将返回:
SELECT *
FROM dbo.bbmf
WHERE status=1
AND (countryId=@countryId)
(除了第一个解决方案,如果您的国家/地区ID = -1,那么您应该将AND (countryId=@countryId)
更改为AND (countryId=@countryId AND @countryId <> -1)
)
第二个是,如果是countryId = -1
,那么您只需要检查状态,并使用status = 1
获取每条记录,那么您应该使用以下语句:< / p>
SELECT *
FROM dbo.bbmf
WHERE status=1
AND (countryId = -1
OR countryId = @countryId)
答案 1 :(得分:2)
我喜欢这样:
DECLARE @countryId int=-1
SELECT *
FROM dbo.bbmf
WHERE
status=1
AND
1 = CASE
WHEN @countryId = -1 THEN 0
WHEN countryId=@countryId THEN 1
ELSE 0 --<<probably don't need the ELSE
END
答案 2 :(得分:1)
您执行SELECT
语句,无论Country Id是否为-1,这是一个冗余呼叫。如果你想在CountryId不等于-1时运行SELECT语句,那么只需在WHERE
子句中过滤掉它或使用Conditional
:
<强>过滤强>
SELECT * FROM dbo.bbmf
WHERE status=1 AND countryId != -1
使用条件
IF (@countryId != -1)
BEGIN
-- SELECT STATEMENT HERE
END
答案 3 :(得分:1)
尝试DEMO
SELECT * FROM dbo.bbmf
WHERE status=1
AND countryId = @CountryID
AND @countryId <> -1
答案 4 :(得分:0)
SELECT * FROM dbo.bbmf
WHERE status=1
AND countryId <> -1
答案 5 :(得分:0)
我找不到您的代码的用例,但可能是您可以使用不可能的where子句运行select,例如:
SELECT * FROM dbo.bbmf WHERE status = 1 AND 1&gt; 2
但是,正如有些人所说,如果你不想要任何结果,就不要运行查询。