Почему вы не можете этого сделать и есть ли обходные пути?
Вы получите эту ошибку.
Msg 2714, уровень 16, состояние 1, строка 13 В базе данных уже есть объект с именем '#temptable'.
declare @x int
set @x = 1
if (@x = 0)
begin
select 1 as Value into #temptable
end
else
begin
select 2 as Value into #temptable
end
select * from #temptable
drop table #temptable





Я собираюсь предположить, что проблема в том, что вы не создали файл #temptable.
Извините, я не могу быть более подробным, но, поскольку вы даже не пытались объяснить, что вы видите, вы получаете менее чем звездный ответ.
Вы не можете этого сделать из-за отложенного разрешения имен, вы можете сделать это с реальной таблицей, просто уберите знаки фунта
Вы также можете сначала создать временную таблицу сверху, а затем выполнить обычную вставку в таблицу
Судя по виду кода, кажется, что вы, возможно, создавали прототип в SQL Studio или похожем, не так ли? Могу ли я догадаться, что вы запускали это несколько раз и дошли до того момента, когда он создал #temptable, но затем потерпел неудачу, прежде чем он добрался до конца и снова сбросил таблицу? Перезапустите инструмент редактирования SQL, который вы используете, и повторите попытку.
Первый шаг ... проверьте, существует ли уже таблица ... если есть, удалите ее. Затем явно создайте таблицу, а не используйте SELECT INTO ...
Так вы найдете его намного надежнее.
IF OBJECT_ID('tempdb..#temptable', 'U') IS NOT NULL
BEGIN
DROP TABLE #temptable
END
CREATE TABLE #temptable (Value INT)
declare @x int
set @x = 1
if (@x = 0)
begin
INSERT INTO #temptable (Value) select 1
end
else
begin
INSERT INTO #temptable (Value) select 2
end
select * from #temptable
drop table #temptable
Кроме того, надеюсь, что имена таблиц и полей для вашего примера упрощены и не являются тем, что вы называете В самом деле;)
- Кевин Фэирчайлд
Отложенное разрешение имен также является причиной того, что вы не можете быть уверены, что sp_depends возвращает правильные результаты, ознакомьтесь с этим сообщением, которое я написал некоторое время назад Вы зависите от sp_depends (без слов)
Это вопрос из двух частей, и хотя Кев Фэйрчайлд дает хороший ответ на второй вопрос, он полностью игнорирует первый - почему возникает ошибка?
Ответ заключается в том, как работает препроцессор. Этот
SELECT field-list INTO #symbol ...
разрешается в дерево синтаксического анализа, которое прямо эквивалентно
DECLARE #symbol_sessionid TABLE(field-list)
INSERT INTO #symbol_sessionid SELECT field-list ...
и это помещает #symbol в таблицу имен локальной области. Задача _sessionid - предоставить каждому пользовательскому сеансу частное пространство имен; если вы укажете два хэша (символ ##), это поведение будет подавлено. Включение и выключение расширения sessionid (во многом) прозрачно.
Результатом всего этого является то, что несколько предложений INTO #symbol создают несколько объявлений в одной и той же области, что приводит к сообщению 2714.