Рейтинг:
2
OriginalGriff
В SQL нет оператора " -- " - вместо этого "--" указывает на начало комментария.
То, что вам нужно, это:
SET @Finalvar = @Finalvar - 1;
[редактировать]
Но даже с этим исправленным кодом он не будет работать: вы получите ошибку преобразования на yoru CAST:
set @coun+= cast(@bck as tinyint);
Потому что значение в
@bck
это не число:
declare @bck varchar(5)='bck'+@finalvar
[/редактировать]
Member 10726045
У меня есть переменное значение из bck1,...bck10. и мне нужно подсчитать до значения finalvar... например, если finalvar=5,то я возьму сумму только из bck1,..., bck5
OriginalGriff
Может быть, вы хотите попытаться точно объяснить, чего вы пытаетесь достичь, а не просто "стенографическую" версию, которая не имеет никакого смысла без контекста вашего проекта, о котором у нас нет никакой информации?
Member 10726045
Проблема стенографического оператора была решена но теперь проблема преобразования varchar в tinyint появилась в переменной bck
Member 10726045
до последней переменной мне нужно взять суммирование переменной "bck". например,если finalvar=6,то суммирование будет иметь значения bck1,bck2,bck3, bck4, bck5 и bck6
OriginalGriff
Вы не можете сделать это "автоматически" - вы не можете "получить" содержимое переменной с помощью строки, содержащей ее имя, не создав полный оператор SQL и не выполнив его в среде, которая также имеет переменные, переданные ей.
Забудьте об этом плане: он не будет работать без большого количества ошибок и сложного в обслуживании кода.
Вместо этого используйте простой оператор CASE WHEN для "жесткого кодирования" значений:
https://www.w3schools.com/sql/sql_case.asp
SET @RESULT = CASE WHEN @finalvar = 1 THEN @bck1
WHEN @finalvar = 2 THEN @bck1 + @bck2
WHEN @finalvar = 3 THEN @bck1 + @bck2 + @bck3
WHEN @finalvar = 4 THEN @bck1 + @bck2 + @bck3 + @bck4
...
END;
Это будет быстрее, проще в обслуживании и ... .. это сработает с первой попытки ...