查询变量行并存储到一个表中

时间:2014-02-19 14:50:13

标签: sql sql-server database

我有一个SQL Server select语句,它在已创建的表中插入数据。

现在我必须定义所有参数并为每个参数运行语句。为了提高效率,我想多次连续几天运行该语句,例如:适用于2013-31-122014-02-19之间的所有日期。

最后,我希望将结果数据放在一个表中,在定义的timestamp列中包含不同的时间戳(假设已定义的变量)。

现在我正在处理这个问题:

DECLARE @historicalDate DATETIME

SELECT  @historicalDate = '2013-31-12'#

SELECT * ....
rest...
into #data

我知道如何在C或MATLAB中完成它。我只想使用for循环并定义一个运行变量来运行该语句并将其存储在表中。

但是如何在SQL Server中处理?

3 个答案:

答案 0 :(得分:0)

您可以在SQL中运行While循环。查看http://technet.microsoft.com/en-us/library/ms178642.aspx了解语法。

因此,对于您的情况,例如:

WHILE (SELECT datetime FROM historicalDate) < '2014-02-19')
{
   //your code to update datebase
}

答案 1 :(得分:0)

如果要插入定义日期范围的所有行,请使用以下内容:

DECLARE @FromDate DATETIME
DECLARE @ToDate DATETIME

SET @FromDate = '20131231'   -- use the robust ISO-8601 format here to avoid issues!
SET @ToDate = '20140219'

SELECT (list of columns)
INTO #data(list of columns)
WHERE TimestampColumn >= @FromDate 
  AND TimestampColumn <= @ToDate 

这可以在一个基于集合的操作中完成整个处理 - 简单易用

或者,如果这不能解决您的问题,那么您究竟想要实现的目标究竟是什么?

答案 2 :(得分:0)

最简单的解决方案是使用日历表并将指定日期范围的日历表连接到查询。 如果您还没有日历表,请参阅:How to create a Calender table for 100 years in Sql

然后你就可以按照以下方式做点什么:

Select <fields>
FROM <YourTable> T
CROSS JOIN CALENDAR C
WHERE C.DATE BETWEEN @startdate and @enddate