在 ROWS BETWEEN 子句中的存储过程中使用变量

Using variable in Stored Procedure in ROWS BETWEEN clause

我要达到的目标是:

获取变量中的输入值,例如@vNoOfRows = 5 并使用变量获取 AVG(marks_total),如下所示:

select avg(marks_total) over (partition by CourseName order by BatchID rows between @vNoOfRows preceding and current row)

如果我将 @vNoOfRows 替换为任何数字,存储过程就可以正常工作,例如5 但是在尝试使变量工作时出现以下编译错误:

Incorrect syntax near '@vNoOfRows'

问题:我缺少什么 - 如何让它与变量一起工作?

谢谢!

如评论中所建议,您可以使用 Dynamic SQL:

实现此目的
declare @vNoOfRows int = 5
declare @sql varchar(4000)

set @sql = 'select avg(marks_total) over(partition by CourseName order by BatchID rows between ' + convert(varchar,@vNoOfRows) + ' preceding and current row) from someTable'
exec @sql

针对您的评论,如果您想将查询结果推送到变量中,您可以这样做:

declare @vNoOfRows int = 5
declare @sql nvarchar(max)
declare @output int

set @sql = 'select @output = avg(marks_total) over(partition by CourseName order by BatchID rows between ' + convert(nvarchar(11), @vNoOfRows) + ' preceding and current row) from someTable'
exec sp_executesql @sql,
    N'@output int OUTPUT',
    @output = @output OUTPUT;