1

有没有办法在 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 字段。如果将其添加到此查询中,我的结果都不好,所以我想我可以创建一个临时表并插入我需要的内容,然后从一个总是在之后立即运行的不同存储过程中查询临时表并将其删除。

那可行吗?如何删除刚刚查询的同一个存储区中的表?我是不是在想这个?

谢谢,里修

4

1 回答 1

1

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

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

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