如何为范围内的每一天创建一个新的临时表?

时间:2015-08-28 13:37:46

标签: sql sql-server temp-tables

我需要根据示例中给出的天数创建临时表,

我需要2015-06-082015-06-29的临时表,我将创建22个临时表,每个临时表根据日期有自己的数据。

我的查询会在循环中选择数据到这些临时表中,唯一需要更改的是日期。

1 个答案:

答案 0 :(得分:0)

由于这里的每个人都建议您不需要每个日期的表格,而是每个日期的表格中都有一行,而且您不一定需要将结果存储到临时表中。

您可以编写一个生成此日期范围的查询,并将现有查询与日期范围查询的结果相结合。

存储查询结果有利于人们直观地查看数据但是sql server不需要临时表中的数据来继续进行数据处理,如果你有一个你知道会产生特定结果集的查询,您可以使用该结果集加入另一个表,但是您没有在运行时看到结果集,但是sql server在运行时获取该结果集并将其与您的表连接。

现在希望如果我说服你不需要每个日期的临时表,那就谈谈解决方案吧。

您只需要一个查询,该查询会生成日期范围为2015-06-082015-06-29的结果集,您可以执行以下操作:

DECLARE @From DATE = '2015-06-08' 
DECLARE @To   DATE = '2015-06-29'

SELECT Dates 
FROM 
  (
    SELECT TOP  (DATEDIFF(DAY,@From , @To))
      DATEADD(DAY , 
                  ROW_NUMBER() OVER (ORDER BY (SELECT NULL))
                ,@To) AS Dates
   FROM master..spt_values
  )Dates_Table

上面的查询将生成一个包含日期的结果集,现在您可以使用此结果集加入另一个表以获得所需的最终结果。