在不使用临时表的情况下优化查询并优化用户体验

时间:2019-05-10 20:58:16

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

情况:

这是我的新手,但只是想出了如何创建表值函数和存储过程。我为客户创建了一些。创建带有参数date的表值函数时遇到问题。在查询本身内,有一些CTE。执行该函数时,查询将永远加载,最终我必须停止它(请参见下面的示例)。

因此,我将CTE分为2个主要的temp表和一个加载临时表的查询。以某种方式,它的执行方式更好(请参见下面的示例)。

目标:

我有哪些选项,用户不必手动运行临时表。用户也应该像存储过程或函数那样容易地执行查询。

示例:

我有一个看起来像一个小时后仍在运行的东西。

CREATE FUNCTION dbo.example
    (@StartDate AS DATE)
RETURNS TABLE 
AS
   RETURN
       WITH CTE AS 
       (........), 
       CTE2 AS (.....) 
       SELECT *  
       FROM CTE2 ... 
       JOINS...

因此,我创建了性能很好的临时表:

DECLARE @StartDate AS DATE = ....
SELECT * INTO #cte FROM (query) temp1

DECLARE @StartDate AS DATE = ....
SELECT * INTO #cte2 FROM (query) temp1

SELECT * 
FROM #cte2.... 
JOIN ....

我有什么选择?

谢谢!

0 个答案:

没有答案