我有一个存储的proc,它应该基于一个可以是NULL的整数来过滤结果,并且我需要能够选择匹配整数或检索所有结果的结果,但是我无法为" all“结果部分找出语法。查询基本上如下:
Select * from dbo.TABLE 
WHERE [IDField] = 
  CASE 
    WHEN ISNULL(@ID, 0) > 0 THEN @ID 
    ELSE ????? 
  END我希望使用IN范围来包含所有的值,因为将其设置为0或Null不会返回任何结果,但这是行不通的:
Select * from dbo.TABLE 
WHERE [IDField] = 
  CASE 
    WHEN ISNULL(@ID, 0) > 0 THEN @ID 
    ELSE 1 OR 2 OR 3 
  END或者这个:
Select * from dbo.TABLE 
WHERE [IDField] IN (
  CASE 
    WHEN ISNULL(@mID, 0) > 0 THEN @mID 
    ELSE 1,2,3 
  END
)发布于 2017-09-27 02:12:48
在没有case的情况下说这个
SELECT * 
FROM dbo.TABLE 
WHERE @id is null OR IDField = @id;然后,您可以将其扩展到:
SELECT * 
FROM dbo.TABLE 
WHERE (COALESCE(@ID, 0) > 0 AND IDField = @id) OR
      IDField IN (1, 2, 3)https://stackoverflow.com/questions/46438364
复制相似问题