Dies ist eine zweiteilige Frage und während Kev Fairchil d liefert eine gute Antwort auf die zweite Frage, ignoriert er die erste - warum wird der Fehler erzeugt?
Die Antwort liegt in der Funktionsweise des Präprozessors. Diese
SELECT field-list INTO #symbol ...
in einen Parse-Baum aufgelöst, die direkt entspricht
DECLARE #symbol_sessionid TABLE(field-list)
INSERT INTO #symbol_sessionid SELECT field-list ...
und dies setzt #symbol in der Namentabelle des lokalen Bereich. Das Geschäft mit _sessionid besteht darin, jede Benutzersitzung mit einem privaten Namespace auszustatten. Wenn Sie zwei Hashes angeben (Symbol ##), wird dieses Verhalten unterdrückt. Das Munging und Ununging der Sessionid-Erweiterung ist (offen) transparent.
Das Ergebnis all dieser ist, dass mehrere INTO # Symbolsätze mehrere Deklarationen im selben Bereich erzeugen, was zu Msg 2714 führt.