首页 > 解决方案 > 在不使用临时表的情况下优化查询并优化用户体验

问题描述

情况:

我对此并不陌生,但只是想出了如何创建表值函数和存储过程。我为客户创建了一些。当我创建一个带有参数日期的表值函数时,我遇到了一个问题。在查询本身中,有一些 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 ....

我的替代方案是什么?

谢谢!

标签: sqlsql-serveruser-defined-functions

解决方案


推荐阅读