我想将 CASE 与 WHERE 一起使用,因此,如果 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
感谢您的帮助
我喜欢这样:
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
你的问题不清楚,所以我看到两个你可能想要获得的结果。
首先是仅取决于countryID
。因此,如果countryID
为 -1,请不要选择任何记录:
如果您没有 -1 的countryId
,那么您可以使用这个简单的选择,因为,如果 @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
,那么你应该使用这个语句:
SELECT *
FROM dbo.bbmf
WHERE status=1
AND (countryId = -1
OR countryId = @countryId)
无论国家/地区 ID 是否为 -1,您都执行 SELECT
语句,这是一个多余的调用。 如果只想在 CountryId 不等于 -1 的情况下运行 SELECT 语句,则只需在 WHERE
子句中将其过滤掉或使用Conditional
:
过滤:
SELECT * FROM dbo.bbmf
WHERE status=1 AND countryId != -1
使用条件:
IF (@countryId != -1)
BEGIN
-- SELECT STATEMENT HERE
END
尝试演示
SELECT * FROM dbo.bbmf
WHERE status=1
AND countryId = @CountryID
AND @countryId <> -1
SELECT * FROM dbo.bbmf
WHERE status=1
AND countryId <> -1
我找不到您的代码的用例,但可能是您可以使用不可能的 where 子句运行选择,例如:
从 DBO.BBMF 中选择 *,其中状态 = 1 和 1>2
但是,正如一些人所说,如果您不想要任何结果,请不要运行查询。