Не удается выбрать из успешно созданной таблицы #temp

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'

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


person Mikayil Abdullayev    schedule 27.09.2011    source источник


Ответы (1)


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

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

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

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