有没有办法根据 WHERE 过滤器优化这个查询?出于兼容性原因,我不能使用计算列。除此之外,我接受任何建议:
UPDATE #ATempTable
SET SomeTotal = (QuantityA + QuantityB + QuantityC)
- (dbo.fmin(dbo.fmax(ISNULL(ValueA,0)
,dbo.fmax(ISNULL(ROUND(ValueB,0),0)
, ISNULL(ValueC,0))), ISNULL(round(ValueD,0), 9999999)))
WHERE QuantityA + QuantityB + QuantityC >
(dbo.fmin(dbo.fmax(ISNULL(ValueA,0)
,dbo.fmax(ISNULL(ROUND(ValueB,0),0)
, ISNULL(ValueC,0))), ISNULL(round(ValueD,0), 9999999)))
我正在使用 SQL Server 2008 R2。fmax
并且fmin
是用户定义的函数,它们分别返回两个给定值中的最大值和最小值,并且不受模式限制。
编辑:附加信息
#ATempTable 是由应用程序调用的过程中的临时表,SomeTotal、QuantityA/B/C 和 ValueA/B/C/D 都是该表的字段。不,代码不是那样的,我重命名了字段。