交叉应用表值函数占用太多时间

时间:2017-02-20 07:00:56

标签: sql-server

;WITH cte AS
(
    SELECT DISTINCT 
        a.ID, a.code AS code, DATEPART(wk, INVCDATE) weekno, 
        (SELECT CONVERT(DATE, (SELECT CONVERT(DATEtime, v.invcdate)  - DATEPART(dw, CONVERT(varchar, CONVERT(DATE, v.invcdate)))) + 1)) MinDateOfWeek,
        (SELECT CONVERT(DATE, (SELECT CONVERT(DATEtime, v.invcdate) + (7 - DATEPART(dw, CONVERT(varchar, CONVERT(DATE, v.invcdate))))))) ADA
    FROM 
        dbo.abc a 
    INNER JOIN 
        dbo.xyz b ON a.ID = b.ID
    INNER JOIN 
        dbo.PLIST p ON a.ID = p.ID
    INNER JOIN 
        dbo.VISITS v ON p.ID2 = v.ID2
    INNER JOIN 
        dbo.UserList o ON o.ID = a.ID
)
SELECT 
    code, weekno, k.Id4, k.Id3, k.Id2, k.Id1, k.Id0 
FROM 
    cte 
CROSS APPLY 
    dbo.f_getmycount(ID, MinDateOfWeek, ADA) k

以上查询花了太多时间。

我需要建议交叉应用表值函数是否有效。

感谢任何帮助。

由于

1 个答案:

答案 0 :(得分:0)

我发现用谷歌搜索,内联表值函数是有用的,而不是多语句TVF。 (以下链接)

Multi-statement Table Valued Function vs Inline Table Valued Function

这样做,结果看起来很棒。

由于