Невозможно выбрать из успешно созданной таблицы #temp - PullRequest
0 голосов
/ 27 сентября 2011
DECLARE @tmp_tab VARCHAR(20)
SELECT  @TMP_TAB = '#TMP_TAB_BANK' + CAST(USER_ID(USER) AS NVARCHAR)
                                    + CAST(@@SPID AS NVARCHAR)

EXEC('CREATE TABLE ' + @TMP_TAB + (ID INT NULL, NAME VARCHAR NULL)')

//Break point

EXEC('select * from ' + @TMP_TAB)

Я работаю в SQL Server 2005. В приведенном выше коде я решаю, как назвать мою временную таблицу. Затем я создаю временную таблицу. Если я запускаю только эти коды, я получаю сообщение Commands completed successfully.

Однако, если я выполню последнюю строку кода для извлечения данных (ну, я знаю, что она пуста), я получу

неверное имя объекта '# TMP_TAB_BANK157'

Почему я не могу получить записи из только что созданной таблицы? Если временная таблица не была создана, то почему я не получаю никаких предупреждений?

1 Ответ

3 голосов
/ 27 сентября 2011

#TEMP таблицы доступны только из контекста, в котором они созданы. Если вы создаете #temp1 в одном spid или соединении, вы не можете получить к нему доступ из любой другой области, кроме дочерних областей.

Если вы создаете таблицу #TEMP в динамическом SQL, вам нужно выбрать из нее в той же области.

Альтернативы:

  • ##GLOBAL временные таблицы, которыеимеют свои риски.
  • Реальные таблицы
...