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

#sql #sql-server #database #stored-procedures #pyodbc

#sql #sql-server #База данных #хранимые процедуры #pyodbc

Вопрос:

Я пытаюсь выполнить хранимую процедуру SQL Server через Pyodbc Python и распечатать результаты выбора в файлах .csv. Но эта процедура в настоящее время используется в других повседневных задачах, поэтому я беспокоюсь, что если мое выполнение процедуры в python прервет ежедневный запланированный процесс задания в агенте SQL Server. В процедуре создается несколько временных таблиц #temp_a, #temp_b и #temp_c. Мне интересно, не нарушат ли эти временные таблицы запланированные задания, включающие эту процедуру, поскольку могут быть другие процедуры, которые будут создавать имена временных таблиц с использованием того же имени, например #temp_a или #temp_b. Временные таблицы создаются внутри процедуры, но без записи запроса на удаление. Я мог бы протестировать это сам, но база данных, над которой я сейчас работаю, настолько хрупкая, что мне сказали не создавать тесты. Спасибо!

Комментарии:

1. Может быть, вы можете изменить заголовок на вопрос? Что-то вроде: «Могу ли я запустить несколько экземпляров одной и той же хранимой процедуры, которая включает временные таблицы в SQL Server?» Это облегчит ответ и облегчит поиск будущих пользователей.

2. Да, я только что изменил его

Ответ №1:

ДА


Временные таблицы будут создаваться за сеанс. Я получил процедуру, выполняемую разными сеансами в одно и то же время, количество временных таблиц будет таким же, как и количество выполненных сеансов. Каждая из этих временных таблиц имеет свое имя:

#V_ …._000000003EB1

#V_ …._000000003EB8

В приведенном выше примере временные таблицы, созданные одной и той же процедурой, выполняются два раза разными сеансами одновременно.

Итак, ваш сценарий не может произойти

Комментарии:

1. Это правильный ответ. Если вы когда-нибудь захотите создать временную таблицу, к которой можно получить доступ вне сеанса, вы можете использовать два хэша: ##temp_a вместо #temp_a, хотя совершенно ясно, что запрашивающему пользователю нужна временная таблица #temp_a только для сеанса.