0

我有一个存储过程,它现在返回一个(可能)大数据集。此数据来自递归调用,因此看起来像这样:

With Hierarchy as(

SELECT distID as D, [Name] as N, enrolling as E, parent_code as P, 
        FROM sales_reps
        WHERE enrolling = @dist_ID
        UNION ALL
            SELECT
            t.distID as D, t.[Name] as N, t.enrolling as E, t.parent_code as P
        FROM sales_reps t
            INNER JOIN Hierarchy h ON t.enrolling = h.D
)
SELECT *, CASE WHEN P > 5 Then 1 Else 0 END As Q 
From Hierarchy

好的,所以这没什么大不了的,问题是现在我需要更多地使用这些数据,并且将在几分钟内对此进行多次查询。所以计划有时(为了不破坏当前功能)创建一个包含这些数据的表,稍后将被删除。

我正在尝试类似的东西:

CASE @temp_Table
    WHEN IS NULL
        Select * FROM retTable
    ELSE
        SELECT INTO @temp_Table
        * FROM retTable
End 

但我无法让我将结果命名为 retTable 或喜欢 case 语句。我不认为这是对 case 语句的正确使用,但我不知道还能使用什么。

4

1 回答 1

0

这是我找到的关于如何在存储过程之间共享数据的最佳文本。里面有很多信息,但值得一读:

http://www.sommarskog.se/share_data.html

不知道您希望将此数据保存到表中的频率和场景的完整详细信息,您可以使用一些选项。

如果您只需要将此信息保存在一个地方,那么一个简单的INSERT-EXEC方法可能适合您。您在调用过程中创建一个与被调用过程(我正在调用hierarchy_stored_proc)的输出相匹配的临时表

CREATE TABLE #results (...)
INSERT INTO #results 
 EXEC hierarchy_stored_proc

如果您认为在更多地方需要此输出,您可以将调用的过程更改为始终将数据写入临时表,然后向 proc 添加一个参数,指示它是否应该通过 select 语句返回结果集. 如果您将该过程的默认值设为 1,则不应影响现有功能。就像是:

WITH Hierarchy AS (...)
INSERT INTO #results
SELECT ...

IF @returnResults=1
  SELECT * FROM #results
于 2012-08-03T14:43:33.980 回答