gpt4 book ai didi

sql - 当需要计数器时,避免在 SQL 中使用 while 循环

转载 作者:行者123 更新时间:2023-12-03 00:57:50 25 4
gpt4 key购买 nike

我觉得这是一个常见问题,但似乎我在 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

但是,查看答案 here在其他网站上,我相信如果可能的话,最好避免使用 while 循环。

所以我的问题是:有没有一种方法可以在不使用 WHILE 结构的情况下在 SQL 中实现带有计数器的循环?我将使用什么技术来转换类似于我发布的循环?或者对于这样的事情,我是否必须硬着头皮使用 while 循环?

顺便说一句,以下一些问题很接近,但它们似乎都没有完全解决需要计数器作为循环条件的问题。大多数答案似乎都谴责使用 WHILE 循环,但我似乎无法找到替代方案的通用解决方案。
sql while loop with date counter
SQL Server 2008 Insert with 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

您应该尝试在互联网上寻找如何在sql表中填充日期

关于sql - 当需要计数器时,避免在 SQL 中使用 while 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23999310/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com