我在SQL Server中有一个存储过程,该过程使用3个参数并返回如下的Orders列表:
@fieldToFilter VARCHAR(100), --Will only be 1 of these values 'Order Date', 'Delivery Date' or 'Dispatch Date'
@StartDate DATE,
@EndDate DATE
SELECT
o.Number, o.Customer
FROM
Order o
WHERE
(o.OrderDate > @StartDate)
AND (o.OrderDate < @EndDate)
AND (SoftDeleted = 0)
上面查询的问题在于,我已经OrderDate
对该WHERE
子句中的列进行了硬编码。
我想做的是使用中的值@fieldToFilter
来确定应在哪一列上进行过滤。例如
@fieldToFilter
是,Order Date
则在该OrderDate
列上进行过滤@fieldToFilter
是,Delivery Date
则在该DeliveryDate
列上进行过滤@fieldToFilter
是,Dispatch Date
则在该DispatchDate
列上进行过滤实现这样的最佳方法是什么?
我不确定语法是否正确,但是类似的东西应该可以工作
SELECT o.Number, o.Customer
FROM Order o
WHERE (@StartDate < case when @fieldToFilter = 'Order Date' then o.OrderDate
when @fieldToFilter = 'Delivery Date' then o.DeliveryDate
when @fieldToFilter = 'Dispatch Date' then o.DispatchDate
else o.OrderDate end)
and (@EndDate > case when @fieldToFilter = 'Order Date' then o.OrderDate
when @fieldToFilter = 'Delivery Date' then o.DeliveryDate
when @fieldToFilter = 'Dispatch Date' then o.DispatchDate
else o.OrderDate end)
and (SoftDeleted=0)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句