Дополнительно
Необходимо объявить скалярную переменную
@RowFrom int
@RowTo int
оба являются глобальными входными парамами для хранимой процедуры, и поскольку я компилирую запрос SQL в хранимой процедуре с помощью T-SQL, затем использую Exec(@sqlstatement)
в конце хранимой процедуры, чтобы показать результат, это дает мне эту ошибку, когда я пытаюсь использовать @ RowFrom
или @ RowTo
внутри выполняемой переменной @ sqlstatement
.. в противном случае это работает нормально.. пожалуйста помогите.
"Must declare the scalar variable "@RowFrom"."
Кроме того, я попытался включить следующее в переменную @ sqlstatement
:
'Declare @Rt int'
'SET @Rt = ' + @RowTo
но @ RowTo
все еще не передает свое значение @ Rt
и генерирует ошибку.
70
6
Вы не можете объединить int с строкой. Вместо:
Вам нужно:
Чтобы проиллюстрировать, что здесь происходит. Допустим @RowTo = 5.
Чтобы встроить это в строку (даже если в конечном итоге это будет число), мне нужно преобразовать ее. Но, как вы можете видеть, число все еще рассматривается как число при его выполнении. Ответ 25, верно?
В вашем случае вам не нужно повторно объявлять @Rt и т. Д. внутри строки @sql вам просто нужно сказать:
Хотя было бы лучше иметь надлежащую параметризацию, например,.
Просто к вашему сведению, я знаю, что это старый пост, но в зависимости от настроек базы данных COLLATION вы можете получить эту ошибку в таком операторе
если, например, вы опечатываете S в
извините, что вычеркнул ответы, уже размещенные здесь, но это фактический случай сообщенной ошибки.
Также обратите внимание, что ошибка не будет отображать заглавную букву S в сообщении, я не уверен, почему, но я думаю, что это потому, что
находится слева от знака равенства.
Просто добавьте, что исправило это для меня, где орфографическая ошибка является подозреваемым согласно [этот блог MSDN][1]...
При разделении строк SQL на несколько строк убедитесь, что вы запятая, отделяющая вашу строку SQL от ваших параметров (и не пытающаяся их объединить)!) и не пропуская пробелов в конце каждой разделенной строки. Не ракетостроение, но надеюсь, что я спасу кого-то от головной боли.
Например:
Вы также можете получить это сообщение об ошибке, если переменная объявлена перед
GO
и на нее есть ссылка.Смотрите этот вопрос и этот обходной путь.
Чувствительность к регистру также вызовет эту проблему.
@MyVariable и @myvariable - это одни и те же переменные в SQL Server Man. Студия и будет работать. Однако эти переменные приведут к «должен объявить скалярную переменную« @MyVariable »в Visual Studio (C #) из-за различий в зависимости от случая.
Просто ответ для будущего меня (может быть, это поможет кому-то еще тоже!). Если вы попытаетесь запустить что-то подобное в редакторе запросов:
И вы получаете ошибку:
Это потому, что вы пытаетесь запустить кучу кода, который включает в себя BOTH выполнение хранимой процедуры И запрос под ним (!). Просто выделите тот, который вы хотите запустить, или удалите / прокомментируйте тот, который вам не интересен.