Sql 查询变量行并存储到一个表中
我有一个SQL Server select语句,它在创建的表中插入数据 现在我必须定义所有参数并为每个参数运行语句。为了提高效率,我希望连续几天多次运行报表,例如2013-31-12和2014-02-19之间的所有日期 最后,我希望将结果数据放在一个表中,在定义的timestamp列中有不同的时间戳,比如说定义的变量 现在我正在处理这个问题:Sql 查询变量行并存储到一个表中,sql,sql-server,database,Sql,Sql Server,Database,我有一个SQL Server select语句,它在创建的表中插入数据 现在我必须定义所有参数并为每个参数运行语句。为了提高效率,我希望连续几天多次运行报表,例如2013-31-12和2014-02-19之间的所有日期 最后,我希望将结果数据放在一个表中,在定义的timestamp列中有不同的时间戳,比如说定义的变量 现在我正在处理这个问题: DECLARE @historicalDate DATETIME SELECT @historicalDate = '2013-31-12'# SE
DECLARE @historicalDate DATETIME
SELECT @historicalDate = '2013-31-12'#
SELECT * ....
rest...
into #data
我知道如何用C或MATLAB来做。我只需要使用for循环并定义一个运行变量来运行语句并将其存储在表中
但是如何在SQL Server中处理呢?您可以在SQL中运行While循环。检查语法 因此,对于您的情况,类似于:
WHILE (SELECT datetime FROM historicalDate) < '2014-02-19')
{
//your code to update datebase
}
如果要为定义的日期范围插入所有行,请使用以下方法:
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
这在一个单一的、基于集合的操作中完成了您的整个处理过程——既漂亮又简单
或者,如果这不能解决你的问题,你到底想达到什么目的 最简单的解决方案是使用日历表并将指定日期范围的日历表加入到查询中。 如果您没有日历表,请参阅: 然后,您将能够按照以下方式进行操作:
Select <fields>
FROM <YourTable> T
CROSS JOIN CALENDAR C
WHERE C.DATE BETWEEN @startdate and @enddate
不要在SQL Server中使用WHILE循环!SQL Server是一个基于集合的关系型系统—使用数据集,不会因为折磨行过程处理而退回到RBAR行……这是我听过很多次的东西。但是如何为数据集运行语句呢?可以制作一个日期数组吗?然后使用这个数组作为输入?@user3165675:SQL Server中的任何数组都是一个表-这就是如何保存多行数据的方法—真实的、临时的、表变量—我认为这在我的情况下不起作用。我必须对过去的事情进行回溯测试。所以我必须写一段代码,试图捕捉过去每一天的现状。也许我真的必须使用循环…您仍然可以在SQL中使用CASE和IF语句。大多数情况下,环路是最后的选择。