带删除表的t-sql中的临时表

时间:2013-02-06 17:03:07

标签: sql sql-server tsql pivot

有没有办法在t-sql中创建一个只有一列的临时表,加载它并检索数据?让我解释一下......

我有这样的特色:

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中的表?我是在想这个?

谢谢, Risho

1 个答案:

答案 0 :(得分:1)

您可以创建一个全局临时表(使用##而不是#定义)。由于exec在与存储过程不同的范围内运行,因此您将无法访问在存储过程范围内定义的临时表。然后,您可以在动态查询中访问该全局临时表,并在proc结束时将其删除。

但是,所有东西都可以访问这个全局表,所以要小心。

CREATE TABLE ##globalTmpTable (EventID INT)