在 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;
我要达到的目标是:
获取变量中的输入值,例如@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;