Когда вы вынуждены использовать динамический sql в хранимых процессах, мы делаем следующее.добавить входную переменную отладки, которая является битовым полем.Если оно равно 0, то exec statment будет обрабатываться, если оно равно 1, вместо этого вы получите оператор печати.Я предлагаю вам сделать что-то похожее на отладку.Вместо выполнения распечатайте результаты вашего SQL или, возможно, вставьте SQl в таблицу, поскольку это, кажется, происходит в цикле.Затем вы можете просмотреть созданный sql и увидеть, где он произошел.
Declare debug bit
set debug = 1
...
if debug = 1 Begin Print @SQL End
Else
Begin Exec (@sql) End
В качестве альтернативы
Создайте таблицу с именем mydynamiccode_logging (со столбцом sql такой же длины, что и для max sql).statment, rundatecolumn и любые другие столбцы, которые вы можете счесть необходимыми (я бы посчитал, что входные переменные, используемые для составления SQL-статистики, пользователя, приложения, если этот фрагмент кода используют несколько)
Довы запускаете exec statment и запускаете что-то вроде этого:
insert mydynamiccode_logging (sql, rundate)
values (@sql, getdate())
Теперь вы также можете добавить поле бит отладки и вести журнал только тогда, когда вы изменили его в режим отладки или вы всегда можете войти, зависит от системы исколько дополнительного времени уходит на это и как сильно ударила остальная часть системы. Вы не хотите существенно замедлять продвижение через регистрацию.