Временная таблица отбрасывается сразу после завершения запроса - PullRequest
0 голосов
/ 25 октября 2019

Temp Table sql code

Если выделить и выполнить строки 1-4, я получу вывод

Команды успешно выполнены.

Затем, если я выделю и выполню строки 6-14, я получу сообщение о выходе

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

Если я выделю и выполню строки1 - 16, я вижу одну строку возвращенных данных. Почему временная таблица, которая была только что создана (в том же сеансе), была немедленно отброшена / недействительной сразу после выполнения кода? Мы выполняем это на SQL Server на основе Azure.

Ответы [ 5 ]

1 голос
/ 25 октября 2019

Если сеанс остается живым, временная таблица все еще должна существовать и быть доступной. Убедитесь, что вы выполняете оператор create и другие операторы в одном и том же сеансе, и между ними не появляется сообщение об отключении.

Убедитесь, что у вас установлено « Disconnect после выполнения запроса ». "проверить в SSMS OFF .

enter image description here

Если это не помогло, выполните эту проверку:

  • Создайте временную таблицу и оставьте сеанс активным (не закрывайте вкладку и не отключайте ее):

    CREATE TABLE #TestThis (oldvalue INT, newvalue INT)
    
  • В другом сеансе запрос tempdbнапример:

    SELECT * FROM tempdb.sys.tables WHERE [name] LIKE N'#TestThis%'
    

Вы должны увидеть временную таблицу, созданную в другом сеансе, начиная с того же имени и получая несколько символов подчеркивания и некоторые цифры наконец. Это означает, что таблица все еще существует, и вы сможете получить к ней доступ из исходного сеанса.

enter image description here

Если вы откроете третий сеанс и создадите еговременная таблица, 2 из них должны быть указаны в запросе tempdb:

enter image description here

0 голосов
/ 25 октября 2019

Оказывается, причиной этой проблемы было использование MFA вместо пароля Active Directory. После того как соединение было переключено на пароль Active Directory, временные таблицы были созданы и доступны и сохранены, как и ожидалось.

0 голосов
/ 25 октября 2019

Сессия создается каждый раз, когда вы щелкаете по значку выполнения, так что да, если вы не выделите часть «создать таблицу», таблица не будет существовать.

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

0 голосов
/ 25 октября 2019

Таблица "# Temp" является уровнем сеанса. Если соединение с базой данных или сеанс закрыты, объект "#TestThis" будет удален.

Вы должны продолжать сеанс.

Сначала необходимо выделить строки выполнения 1-4, чтобы создать временнуюТаблица "#TestThis", если не существует.

  CREATE TABLE #TestThis
  (
   oldvalue INTEGER,
   newvalue INTEGER) 

Тогда вы можете выполнить строки 6-14. Если вы сначала не создали временную таблицу, как вы можете вставить данные во временную таблицу "#TestThis"?

Теперь вы можете выполнить:

INSERT INTO #TestThis
 (
    oldvalue,
    newvalue
   )
 VALUES
 (  1234,
    7788
    )

Или

 SELECT * FROM #TempThis

Надеюсь, это поможет.

0 голосов
/ 25 октября 2019

Matthew Walk. Вы можете попробовать это решение, как я показал в примере ниже.

CREATE TABLE #TestThis(oldvalue INT, newvalue INT )

INSERT INTO  #TestThis(oldvalue, newvalue) VALUES (1,3),(5,7)

select  oldvalue, newvalue FROM  #TestThis

IF OBJECT_ID('tempdb..#TestThis') IS NOT NULL DROP TABLE #TestThis

В этом примере вам нужно проверить, что идентификатор объекта равен null или нет для вашего искушаемого,если оно не равно нулю, вам нужно удалить вашу временную таблицу.

Надеюсь, это вам поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...