SQL服务器:在视图中声明变量

SQL Server : declare variables in a view

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

CREATE VIEW uvw_new_view 

DECLARE @startdate
DECLARE @enddate

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

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

大家提前干杯:)

根据语法,推测您正在使用 SQL 服务器。

你想要一个 table-valued 函数。例如,returns 范围内所有日期的函数:

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 是一个 db<>fiddle。