有没有办法在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
答案 0 :(得分:1)
您可以创建一个全局临时表(使用##而不是#定义)。由于exec在与存储过程不同的范围内运行,因此您将无法访问在存储过程范围内定义的临时表。然后,您可以在动态查询中访问该全局临时表,并在proc结束时将其删除。
但是,所有东西都可以访问这个全局表,所以要小心。
CREATE TABLE ##globalTmpTable (EventID INT)