ASynchronous Создание временных таблиц в SQL Server - PullRequest
0 голосов
/ 06 мая 2019

В настоящее время я пытаюсь определить возможные проблемы с созданием временных таблиц из веб-приложения и то, как SQL Server естественным образом определяет отдельные сеансы.

SELECT blabla, lala FROM table INTO #TempTable
SELECT blabla FROM #TempTable
DROP TABLE #TempTable

В приведенном выше примере один пользователь веб-приложенияожидание выполнения второй строки, и другой пользователь запускает те же 3 строки, что будет определять, получает ли 2-й пользователь «Объект уже существует» или же для этого пользователя создается новая таблица #TempTable.

Если бы каждый пользователь находился на отдельном компьютере в одной и той же сети, SQL-сервер рассматривал бы это как отдельные сеансы и, таким образом, создавал отдельные временные таблицы.

А как быть, если он запущен на одном компьютере в двух разных сетях?

Ответы [ 2 ]

1 голос
/ 06 мая 2019

Каждое подключение пользователя к базе данных - это собственный сеанс.Эти сеансы являются уникальными, даже если вы используете пул соединений в SQL Server.За кулисами SQL Server добавляет каждую таблицу #tempTable с одним ссылочным номером сеанса, поэтому они технически даже не называют одно и то же во время выполнения.

Если корень вашей проблемы - сообщение об ошибке объектауже существует, когда вы отлаживаете.Попробуйте добавить фрагмент кода ниже, прежде чем создавать временную таблицу:

IF OBJECT_ID('[tempdb]..[#tempTable]') IS NOT NULL
BEGIN
    DROP TABLE #tempTable
END
0 голосов
/ 06 мая 2019

SQL Server не определяет отдельные сеансы.
Это клиентское приложение, которое создает сеансы. Вы можете написать приложение, в котором весь трафик к базе данных использует одно соединение (не так просто) или для каждой страницы создается отдельное соединение (распространенная ошибка). Оба решения довольно плохие.
В правильном дизайне вы должны использовать пул соединений, а ваш код должен резервировать соединения из пула соединений по мере необходимости.
Даже если вы используете пул соединений, вполне возможно, что каждая команда выполняется в соединении, отличном от пула.

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