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;
我有以下简化查询(当前从存储过程返回),我想将其用作 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;