При выполнении динамического SQL он выполняется в другой области действия , поэтому, если вы объявите свои переменные в той же области действия, что и varchar
, допускающий оператор SQL, вы получите такую ошибку.
Правильным способом было бы:
EXECUTE ('DECLARE @lnRowIdMin INT; SELECT @lnRowIdMin = MIN(TMP_ROW_ID) FROM #' + @lvcBaseTable)
Но тогда вы не сможете получить доступ к этой переменной извне динамического SQL, что, я думаю, вам и нужно.
Два способа решения этой проблемы:
- Поместите код, который также использует переменную в динамическом SQL.
- Вставьте значение во некоторую временную таблицу, затем вы можете использовать его вне динамическогоSQL просто выполняет
SELECT
для временной таблицы.