执行连接表值UDF

时间:2014-07-12 09:12:18

标签: sql-server tsql user-defined-functions

情况: 我有一个包含10,000行的主表 ORDER 和一个包含100,000行的相关详细信息表 ORDERPOSITIONS

对于 ORDERPOSITIONS 表,有一个值为UDF“udf_SumPos”的表,其行为如下:

INSERT INTO @table
SELECT t1.order,
       sum(t2.price) sumPrice
FROM   ORDER t1
       JOIN ORDERPOSITIONS t2
         ON t1.order = t2.order
GROUP  BY t1.order 

问题:

如果我使用以下SQL语句:

SELECT t1.order,
       t2.sumPrice
FROM   ORDER t1
       JOIN udf_SumPos() t2
         ON t1.order = t2.order
WHERE  t1.order = 'MyOrderNumber' 

SQL-Server是否会为整个表ORDERPOSITIONS执行udf“udf_SumPos()”,或仅为ORDER =' MyOrderNumber '执行记录?

(由于某些原因我不能使用CROSS APPLY或内联标量UDF)

谢谢!

1 个答案:

答案 0 :(得分:1)

它将为整个ORDERPOSITIONS表执行此操作。

SQL Server甚至不会尝试在整个查询的上下文中优化多语句TVF,并且不会像您希望的那样将谓词推入其中。

您需要使用视图或内联TVF来进行整体优化。

或者改变多语句TVF以接受一个参数,告诉它要过滤的行。