谁能向我解释以下查询是如何工作的?
with my_query (my_date) as (select convert(date, '03-10-2021', 105)
union all
select dateadd(day, 1, my_date)
from my_query
where my_date <= convert(date, '03-10-2021', 105))
select *
from my_query;
我的想法是这个查询会进入无限循环,因为每次执行查询的递归部分时它仍然会在数据中找到行,但实际上查询终止并返回结果广告这很奇怪。
感谢对我的问题的任何解释。
谢谢
答案 0 :(得分:0)
您的查询总是返回两行:
首先选择:
select convert(date, '03-10-2021', 105)
返回:'03-10-2021'
您正在检查的递归部分 my_date 现在是“03-10-2021”等于或大于“03-10-2021”,这是真的,它返回 dateadd(day, 1, my_date)
:
2021-10-04
所以下一级递归,现在 my_day = '2021-10-04' 和条件检查是否 '2021-10-04' <= convert(date, '03-10-2021', 105) 这是假的,所以递归停止