SQL Server показывает “Имя недопустимого объекта '#temp'” при работе с временной таблицей

Да! все время! (Должны признать, главным образом используемый, когда Вы строги, относительно которой таблицы Вы хотите звонить сначала)

На этом предмете: вот хорошее визуальное руководство по соединениям .

16
задан fedorqui 30 June 2017 в 13:24
поделиться

1 ответ

Предположительно, у вас есть следующий код, который выбирает из #temp и выдает ошибку?

Это зависит от области действия. ## temp - это глобальная временная таблица, доступная в других сеансах. #temp - это «локальная» временная таблица, доступная только для текущей области выполнения. sp_executesql работает в другой области, поэтому он вставляет данные в #temp, но если вы затем попытаетесь получить доступ к этой таблице вне вызова sp_executesql, он не найдет ее.

например Эта ошибка, поскольку #Test создается и виден только контексту sp_executesql:

EXECUTE sp_executesql N'SELECT 1 AS Field1 INTO #Test'
SELECT * FROM #Test

Вышеупомянутое работает с ## Test, поскольку он создает глобальную временную таблицу.

Это работает, поскольку SELECT является частью той же области.

EXECUTE sp_executesql N'SELECT 1 AS Field1 INTO #Test; SELECT * FROM #Test'

У меня будут следующие вопросы:

  1. Вам действительно нужно использовать временные таблицы, разве вы не можете найти решение без них, используя, например, подзапрос?
  2. Вам действительно нужно выполнять такой sql с помощью sp_executesql?
17
ответ дан 30 November 2019 в 22:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: