Во-первых, тот факт, что вам нужно прибегнуть к динамическому SQL, потому что вам нужно выполнить один и тот же запрос к разным таблицам, автоматически пахнет как плохой дизайн базы данных.
Обычно это означает, что у вас несколько таблиц для одной и той же таблицы.и имена этих таблиц содержат часть, которая должна содержаться внутри столбца.
Например, такие таблицы, как Payments_2016
, Payments_2017
и Payments_2018
- хотя должна быть только одна таблица с именемPayments
со столбцом с именем Payement_Year
.
Таким образом, правильное решение, вероятно, состоит в том, чтобы реорганизовать базу данных и заменить дублирующиеся таблицы такого типа на одну таблицу.
Сказав это,Я знаю, что многие люди не могут изменить структуру базы данных, поэтому вот решение, которое следует использовать в случае, если вы реорганизуете базу данных:
Вы объявляете переменную @ERR_MESSAGE
в хранимой процедуре, но вы пытаетесьиспользовать его внутри динамического SQL - и он работает в другой области видимости и поэтому не имеет доступа к @ERR_MESSAGE
, объявленному вхранимая процедура.
Вы можете либо объявить ее внутри динамического SQL, либо передать ее sp_ExecuteSql
с надлежащими определениями параметров.
Вы не показали, как вы запускаете этот SQL, так что довольно сложно привести правильный пример кода.
Кроме того, у вас есть SELECT TOP 100*...
- вам нужен пробел между 100
и *
- SELECT TOP 100 * FROM
....