case 语句参数的替代方法

Alternative to parameter for case statement

我有以下简化查询(当前从存储过程返回),我想将其用作 Entity Framework 工作视图的基础:

Select 
cast (case when warehouse = @Warehouse then 1 else 0 end as bit) as AtThisWarehouse,    
s.id as productStatusId 
from products p 
left join productstatus s on p.availiblity = s.cd;

显然我不能在视图中使用参数,也不想使用存储过程或用户定义的函数,因为我想遵循 Entity Framework 中的当前模式。

Warehouse 是已知的,可以通过过滤器传递给 where 子句使用,但我不确定如何利用该事实来取回我想要的结果。关于如何解决这个问题有什么建议吗?

因此,不要将 case 语句与参数一起使用,而是将其用作过滤器。所以你的观点会是这样的(最佳实践是总是在你的对象上包含模式,我假设是 dbo):

查看

select warehouse
     , productStatusId
     , productId
from dbo.products p
left join dbo.productstatus s on p.availability = s.cd;

查询使用视图

select productId
 , productStatusId
from schema.viewname
where warehouse = @warehouse;

获取所有仓库状态的另一种方式

select cast(case when warehouse = @warehouse then 1 else 0 end as bit) as AtThisWarehouse, 
productStatusId
from schema.viewname;