Это вопрос, состоящий из двух частей, и хотя Кев Фэйрчайлд дает хороший ответ на второй вопрос, он полностью игнорирует первый - почему возникает ошибка?
Ответ заключается в том, как работает препроцессор. Это
SELECT field-list INTO #symbol ...
преобразуется в дерево разбора, которое прямо эквивалентно
DECLARE #symbol_sessionid TABLE(field-list)
INSERT INTO #symbol_sessionid SELECT field-list ...
и это помещает #symbol в таблицу имен локальной области видимости. Бизнес с _sessionid заключается в предоставлении каждому пользовательскому сеансу частного пространства имен; если вы укажете два хэша (символ ##), это поведение будет подавлено. Изменение и отключение сеансового расширения (очевидно) прозрачно.
Результатом всего этого является то, что несколько предложений INTO #symbol создают несколько объявлений в одной и той же области видимости, что приводит к сообщению 2714.