作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下 SQL 查询:
DECLARE @MyVar datetime = '1/1/2010'
SELECT @MyVar
这自然会返回“1/1/2010”。
我想做的是有一个日期列表,例如:
1/1/2010
2/1/2010
3/1/2010
4/1/2010
5/1/2010
然后我想对数字进行 FOR EACH 并运行 SQL 查询。
类似于(伪代码):
List = 1/1/2010,2/1/2010,3/1/2010,4/1/2010,5/1/2010
For each x in List
do
DECLARE @MyVar datetime = x
SELECT @MyVar
所以这会返回:-
2010 年 1 月 1 日 2010年2月1日 2010年3月1日 2010年4月1日 2010年5月1日
我希望将数据作为一个结果集返回,而不是多个结果集,因此我可能需要在查询末尾使用某种联合,因此循环的每次迭代都会联合到下一个。
编辑
我有一个接受“截止日期”参数的大型查询,我需要运行它 24 次,每次都有一个我需要能够提供的特定截止日期(这些日期将是动态的)我想要避免使用 union all 加入查询重复 24 次,就好像我需要返回并添加其他列一样,这将非常耗时。
最佳答案
SQL 主要是一种面向集合的语言 - 在其中使用循环通常不是一个好主意。
在这种情况下,使用递归 CTE 可以获得类似的结果:
with cte as
(select 1 i union all
select i+1 i from cte where i < 5)
select dateadd(d, i-1, '2010-01-01') from cte
关于SQL Server FOR EACH 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10300414/
我是一名优秀的程序员,十分优秀!