1

我有一个存储过程,它构建一个由日期组成的临时表(一个循环构建表)。
我需要有一个连接到该临时表的视图。
不幸的是,由于系统的愚蠢以及数据库的设计者的糟糕设计,它绝对必须是一个视图,并且需要在所述视图中执行此操作。我不想争论架构是否正确,因为我完全无法控制它。

我的问题是:有什么办法可以访问可以从视图中循环的东西吗?或者可能是一些超级酷的方式来构建一个不使用循环的日期表——这也太棒了。

否则,我只会在他们的数据库中的某个地方隐藏一个静态创建的日期表,并希望他们不会注意到什么。

编辑:循环是这样的:

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
4

1 回答 1

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;
于 2013-07-10T02:13:42.073 回答