Мне нужно создать временную таблицу в одной из моих хранимых процедур. Данные для вставки во временную таблицу получены из динамического сводного запроса, поэтому я привязан к динамическому SQL. Так это становится примерно так -
set query = 'select ....'+ pivotcols +
' into ##temp_table
from base_table
pivot (
max(col1)
for col2 in
(' + pivotcols +' as final'
exec(query)
Здесь я не могу использовать локальную временную таблицу (#temp_table), так как таблица, созданная в динамическом sql, не будет доступна для остальной хранимой процедуры. В итоге я использую глобальную временную таблицу (## temp_table).
Теперь проблема в том, что, если есть непредвиденный выход из сохраненного процесса, когда таблица не удаляется должным образом, это может вызвать исключения, когда кто-то другой пытается использовать тот же sp. Также даже без исключения, если два человека выполняют одну и ту же процедуру, могут возникнуть проблемы. Есть ли решение этой проблемы? Какие альтернативы я могу использовать?
Примечание: я должен использовать динамический sql - сводный запрос нельзя сделать каким-либо другим способом, так как столбцы, которые будут вращаться, определяются во время выполнения. Но я гибко отношусь к тому, как данные на самом деле идут во временную таблицу
РЕДАКТИРОВАТЬ: отредактировал «переменную» в заголовке вопроса до «таблицы»