SQL Server:在视图中声明变量

SQL Server:在视图中声明变量,sql,sql-server,view,sql-view,Sql,Sql Server,View,Sql View,我已经创建了一个视图,希望有一个滚动的数据范围。我知道视图中不允许使用局部变量,所以我想知道最好的方法是什么。我不想把我的日期添加到我的WHERE中,因为我正在处理大量的数据,因此会显著降低速度 CREATE VIEW uvw_new_view DECLARE @startdate DECLARE @enddate SET @startdate = DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) - 1, 0) -- back 1 year SET @en

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

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

这是一个很好的例子。

用你正在使用的数据库标记你的问题。非常抱歉