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

このデータをテーブルに保存する頻度とシナリオの詳細がわからない場合は、使用できるオプションがいくつかあります。

この情報を1つの場所に保存するだけでよい場合は、簡単な方法INSERT-EXECでうまくいく可能性があります。呼び出されたプロシージャ(私が呼び出しているhierarchy_stored_proc)の出力と一致する一時テーブルを呼び出し元のプロシージャに作成します

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

より多くの場所でこの出力が必要になると思われる場合は、呼び出されたプロシージャを変更して、常に一時テーブルにデータを書き込み、次に、selectステートメントを介して結果セットを返す必要があるかどうかを示すパラメータをプロシージャに追加できます。 。その手順1のデフォルト値を作成した場合、既存の機能は影響を受けません。何かのようなもの:

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

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