1

t-sql に 1 つの列だけを含む一時テーブルを作成し、それをロードしてデータを取得する方法はありますか? 説明させてください...

私はこのようなsprocを持っています:

SELECT @cols = STUFF(( SELECT DISTINCT TOP 100 PERCENT '],[' + cast(MonthYear as varchar(10)) FROM vCountByMonthYear    where 
    SiteGUID = @SiteGuid 
    and 
    MonthYear BETWEEN @StartDate AND @StopDate 
    ORDER BY '],[' + cast(MonthYear as varchar(10)) FOR XML PATH('') ), 1, 2, '') + ']' 

     SET @query = N'SELECT Wuc,LineCount, ' + @cols +' FROM (SELECT Wuc,MonthYear,LineCount,Value,OrderBy FROM vCountByMonthYear 
     where SiteGUID = ' + CHAR(39) + CONVERT(nvarchar(36), @SiteGuid) + CHAR(39) + 
     ' and MonthYear BETWEEN ' 
     + CHAR(39) 
     + CONVERT(nvarchar(10),@StartDate )
     + CHAR(39) 
     + ' AND ' 
     + CHAR(39) 
     + CONVERT(nvarchar(10),@StopDate )
     + CHAR(39) 
     + ' ) p 
     PIVOT ( Sum ([Value] ) FOR MonthYear IN ( '+ @cols +' ) ) AS pvt ORDER BY Wuc,OrderBy' 

     execute(@query)

ビューを変更すると、すべてが台無しになりますが、そのビューから追加情報 (EventId フィールド) を取得する必要があります。このクエリに追加すると、結果がすべて悪いので、一時テーブルを作成して必要なものを挿入できると思いました。その後、常にすぐに実行される別の sproc から、一時テーブルをクエリして削除します。

それは可能ですか?クエリしたばかりの sproc 内のテーブルを削除するにはどうすればよいですか? 私はこれを考えすぎていますか?

ありがとう、リショー

4

1 に答える 1

1

グローバル一時テーブル (# ではなく ## で定義) を作成できます。exec はストアド プロシージャとは異なるスコープで実行されるため、ストアド プロシージャのスコープで定義された一時テーブルにアクセスすることはできません。その後、動的クエリでそのグローバル一時テーブルにアクセスし、proc の最後で削除できます。

ただし、すべてがこのグローバル テーブルにアクセスできるようになるため、注意が必要です。

CREATE TABLE ##globalTmpTable (EventID INT)
于 2013-02-06T17:12:20.143 に答える