从视图委派的临时表

时间:2013-07-10 01:55:16

标签: sql-server tsql

我有一个存储过程,它构建一个由日期组成的临时表(循环构建表) 我需要有一个加入临时表的视图 不幸的是,由于系统的愚蠢与无论谁创建数据库的糟糕设计相结合,它绝对必须是一个视图,并且需要在所述视图中进行此连接。我不想就架构是否正确而争论,因为我完全无法控制它。

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

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

编辑:循环是这样的:

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

1 个答案:

答案 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;