MS Sql Server - Использование переменной в хранимой процедуре в предложении ROWS BETWEEN - PullRequest
0 голосов
/ 24 октября 2018

У меня проблемы с пониманием.Я пытаюсь достичь:

Получить входное значение в переменной, например, @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, но выдает следующую ошибку компиляции при попытке заставить работать переменную:

Неверный синтаксис рядом с '@ vNoOfRows'

Вопрос: Чего мне не хватает - и как мне заставить его работать с переменными?Спасибо!

1 Ответ

0 голосов
/ 24 октября 2018

Как указано в комментариях, вы можете добиться этого с помощью динамического 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 varchar(4000)
declare @output int

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