Con*_*ete 5 sql sql-server loops while-loop
我觉得这是一个常见问题,但似乎我在SO或其他网站上找到的答案似乎都没有解决带有计数器的while循环问题.
假设我正在尝试在SQL中编写一个存储过程,该存储过程将填充用户的时间表,方法是在该月的剩余时间内为每一天插入一行.如果@endMonth变量保存了该月的最后一天,那么我知道我可以轻松地编写一个while循环并按照这些行执行某些操作:
WHILE @date <= @endMonth
BEGIN
//Do some action with the date, like an insert
SET @date = DATEADD(d, 1, @date) //increment the date by one day
END
Run Code Online (Sandbox Code Playgroud)
但是,在这里和其他网站上查看答案会让我相信,如果可能的话,最好避免使用while循环.
所以我的问题是:有没有办法在不使用WHILE结构的情况下在SQL中实现带计数器的循环?我将使用什么技术来转换类似于我发布的循环?或者像这样的东西,我是否必须咬紧牙关并使用while循环?
顺便说一下,下面的一些问题很接近,但它们似乎都没有解决需要将计数器作为循环条件的问题.大多数答案似乎都谴责使用WHILE循环,但我似乎无法找到一个替代方案的通用解决方案.
带有日期计数器的sql while循环
SQL Server 2008使用WHILE LOOP插入(这一个很接近,但不幸的是,它只适用于自动增量列)
我看到了很多填充数据的例子。
首先,您在 cte 中创建从开始日期到结束日期的日期,然后可以将其插入表中。
其中之一是 cte:
DECLARE @StartDate DateTime = '2014-06-01'
DECLARE @EndDate DateTime = '2014-06-29'
;WITH populateDates (dates) AS (
SELECT @StartDate as dates
UNION ALL
SELECT DATEADD(d, 1, dates)
FROM populateDates
WHERE DATEADD(d, 1, dates)<=@EndDate
)
SELECT *
INTO dbo.SomeTable
FROM populateDates
Run Code Online (Sandbox Code Playgroud)
你应该尝试在互联网上寻找how to populate date in sql table