SQL Server - временная процедура в глобальном масштабе исчезает сразу после закрытия окна запроса в SSMS - PullRequest
0 голосов
/ 02 мая 2018

Я пытаюсь получить некоторые данные с сервера, доступ к которому у меня есть только при использовании аналитической хранимой процедуры, которая еще не была продвинута, поэтому я использую ее вручную, как

CREATE PROCEDURE ###MyProcedure

Затем в другом окне запроса я могу нормально запустить новую временную процедуру. Но как только я закрываю окно запроса с оператором create, временная процедура исчезает. Что еще хуже, есть несколько подпрограмм, которые требуют от меня спама в моей рабочей области с открытыми окнами запросов, чтобы использовать этот подход.

Я думал, что глобальные временные объекты сохраняются до тех пор, пока не будут закрыты все ссылочные соединения. Единственное различие в моих данных соединения (с помощью вкладки свойств F4) между окнами запросов в SSMS - это SPID, но я вижу то же имя соединения.

1 Ответ

0 голосов
/ 02 мая 2018

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

Вместо использования CREATE PROC ##YourSP... Попробуйте сделать его постоянным в tempdb: CREATE PROC tempdb.dbo.YourSP.... затем он будет сохраняться до перезапуска SQL Server (так как tempdb перестраивается при каждом запуске службы).

Редактировать: если вы используете SQL Server 2016+, вы также можете вместо этого использовать CREATE OR ALTER PROC ... Это остановит CREATE, генерирующее ошибку, если служба еще не был перезапущен; и, следовательно, SP еще не потерян.

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