我有一个存储过程,它构建一个由日期组成的临时表(循环构建表) 我需要有一个加入临时表的视图 不幸的是,由于系统的愚蠢与无论谁创建数据库的糟糕设计相结合,它绝对必须是一个视图,并且需要在所述视图中进行此连接。我不想就架构是否正确而争论,因为我完全无法控制它。
我的问题是:有什么办法可以访问从视图中循环的东西吗?或者可能是一些超酷的方式来构建一个日期表而不使用循环 - 这也很棒。
否则我只是在他们的数据库中隐藏一个静态创建的日期表,并希望他们不会注意到什么。
编辑:循环是这样的:
declare @years table (
year date,
label nvarchar(6)
)
declare @d date
set @d = '20060101'
while(@d < '20400101')
begin
insert into @years select dateadd(month, 6, @d),
'FY' + CONVERT(nvarchar(4), year(@d))
set @d = DATEADD(year, 1, @d)
end
select * from @years
答案 0 :(得分:3)
以下是两种选择:
使用用户定义的表函数而不是视图。这为您提供了更多的灵活性。
您可以存储日期表。您也可以使用递归CTE创建一个:
with dates as (
select cast('2013-01-01' as date) as thedate
union all
select dateadd(day, 1, thedate)
from dates
where thedate <= '2013-01-31'
)
select *
from dates;