Манипуляции с временными таблицами в одном соединении не работают со sprocs - PullRequest
0 голосов
/ 24 февраля 2011

У меня есть долгоживущее соединение, по которому приложение создает временную таблицу и использует ее для извлечения некоторых динамических данных времени выполнения. Насколько я понимаю, должна быть возможность ссылаться на эту временную таблицу, если она выполняется для одного и того же соединения. Это действительно возможно, когда я делаю кучу необработанных запросов, но это невозможно с sprocs. Я использую ADO.NET.

Я что-то упускаю здесь очевидное?

Работает


CREATE TABLE #CustomerNames (CustomerName nvarchar(200) PRIMARY KEY)
DECLARE @CustomerName nvarchar(200)
SET @CustomerName ='Joe Baker'
INSERT INTO #CustomerNames (CustomerName) VALUES (@CustomerNames)

Не работает


EXEC customerNames_createTempTable
EXEC customerNames_addCustomerName 'Joe Baker'

где sprocs инкапсулирует запросы

РЕДАКТИРОВАТЬ : решение состоит в том, чтобы создать временную таблицу вне sproc, используя запрос, а затем выполнить все манипуляции с таблицей в том же соединении, используя sprocs. Таким образом, временная таблица не выходит из области видимости.

Ответы [ 2 ]

4 голосов
/ 24 февраля 2011

Прошло много времени с тех пор, как я работал с SQL Server, но, насколько мне известно, временные таблицы, созданные в хранимой процедуре, существуют только на время выполнения процедуры.Другими словами, они удаляются после завершения процедуры.

2 голосов
/ 24 февраля 2011

Проблема в области действия временных таблиц. Временная таблица существует только внутри хранимого процесса, который создает таблицу, и во всех хранимых процессах, вызываемых первым sproc. Так что в вашем неработающем примере временная таблица недействительна после того, как вы вызовете customerNames_createTempTable.

Решением является глобальная временная таблица. Эти временные таблицы создаются с помощью #, например ## CustomerNames. Но будьте осторожны: глобальные временные таблицы видны всем соединениям SQL Server. Поэтому вы должны назвать их уникальным именем.

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

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