SQL Server:在视图中声明变量

问题描述

我已经创建了一个视图,并希望具有滚动数据范围。我知道视图中不允许使用局部变量,因此想知道最好的方法是什么。我不想将DATEADD放在WHERE中,因为我正在处理大量数据,因此会大大降低其速度。

CREATE VIEW uvw_new_view 

DECLARE @startdate
DECLARE @enddate

SET @startdate =  DATEADD(yy,DATEDIFF(yy,GETDATE()) - 1,0)  -- back 1 year
SET @enddate = DATEADD(yy,GETDATE()) + 4,-1) -- forward 3 years

//stuff 
WHERE startdate >= @startdate AND enddate <= @enddate

提前欢呼:)

解决方法

大概基于语法,您正在使用SQL Server。

您需要一个表值函数。例如,一个返回范围内所有日期的函数:

create function dates (
    @startdate date,@enddate date
) 
returns table
as
return
    with cte as (
          select @startdate as dte
          union all
          select dateadd(day,1,dte)
          from cte
          where dte < @enddate
         )
     select dte
     from cte;

Here是本示例的d​​b 小提琴。