Вы не можете получить доступ к временным таблицам, объявленным в динамическом SQL.
Однако, если вы создаете временную таблицу перед выполнением динамического запроса, вы можете ссылаться на нее в этом динамическом запросе.
В вашем примере это станет
CREATE TABLE #db1
(...table definition...)
CREATE TABLE #db2
(...table definition...)
EXECUTE('INSERT #db1 SELECT * FROM ' + @db1)
EXECUTE('INSERT #db2 SELECT * FROM ' + @db2)
Вам также нужно будет создать и выполнить второй запрос (используя @p1
) в качестве динамического SQL, поскольку вы хотите использовать переменные в качестве заполнителей для имен столбцов.
EDIT
Нет простого способа изменить это решение, если структура ваших исходных таблиц меняется.
Вы можете написать некоторый код для запроса информационной схемы, чтобы сгенерировать и применить динамические сценарии ALTER TABLE
к временной таблице, чтобы ее структура соответствовала исходной таблице, но это может оказаться более сложным, чем вы готовы принять.
Предложение Andomar о выполнении всей операции в динамическом SQL может оказаться более подходящим.
Это может быть хорошей идеей сделать шаг назад и переоценить, является ли то, что вы пытаетесь сделать, лучшим решением для любой проблемы, которую вы пытаетесь решить.