4

我想将 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

谢谢你的帮助

4

6 回答 6

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)To AND (countryId=@countryId AND @countryId <> -1)

第二个是,如果是countryId = -1,那么你只需要检查状态,并用 获取每条记录status = 1,那么你应该使用这个语句:

SELECT * 
FROM dbo.bbmf 
WHERE status=1 
  AND (countryId = -1 
     OR countryId = @countryId)
于 2012-09-15T09:23:42.243 回答
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
于 2012-09-15T13:23:32.210 回答
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 
于 2012-09-15T09:25:39.890 回答
1

尝试演示

SELECT * FROM dbo.bbmf 
WHERE status=1 
AND countryId = @CountryID
AND @countryId <> -1
于 2012-09-15T09:26:56.440 回答
0
SELECT * FROM dbo.bbmf 
WHERE status=1 
AND countryId <> -1
于 2012-09-15T09:34:43.113 回答
0

我找不到您的代码的用例,但可能您可以使用不可能的 where 子句运行选择,例如:

SELECT * FROM dbo.bbmf where status=1 AND 1>2

但是,正如某些人所说,如果您不想要任何结果,请不要运行查询。

于 2012-09-15T09:36:27.857 回答