У меня есть 140 000 инструкций INSERT Мне нужно запустить. Я пытаюсь вставить запись в таблицу базы данных, а затем ввести созданные PK в временную таблицу, которую я затем верну. Это выглядит примерно так:Таблица Temp хранимой процедуры недоступна после первого GO
CREATE PROCEDURE sp_MassInsertProcedure
@PassInVariable int
AS
CREATE TABLE #TempTable(OriginalID int IDENTITY(1,1), NewID int);
--These two inserts are essentially repeated 70,000 times
INSERT INTO MyDBTable (something, something, something) VALUES (1, 2, @PassInVariable);
INSERT INTO #TempTable(NewID) SELECT SCOPE_IDENTITY();
SELECT * FROM #TempTable;
DROP TABLE #TempTable;
У меня есть несколько других хранимых процедур так же, как это, которые имеют максимум 2000 операторов вставки и так отлично работает, но я думаю, что из-за количество заявлений в данном СП он дает мне «Запрос завершен с ошибками», когда я пытаюсь создать процедуру, но на самом деле не создаю процедуру.
Затем я добавил GO каждые 200 операторов вставки, но после первого запуска GO будет выпущена временная таблица, и я получаю сообщение об ошибке «TempTable is unavailable» (я также получаю ту же ошибку для @PassInVariable после первого GO выполняет). Странным является то, что когда я помещаю выше описанный SQL в стандартный скрипт (не в хранимую процедуру), он работает.
Итак, мой вопрос: кто-нибудь знает, как сохранить временную таблицу/переменную в одной хранимой процедуре, которая использует несколько пакетных исполнений с помощью команды GO?
CREATE PROCEDURE sp_MassInsertProcedure
@PassInVariable int
AS
CREATE TABLE #TempTable(OriginalID int IDENTITY(1,1), NewID int);
--These inserts are essentially repeated 70,000 times
INSERT INTO MyDBTable (something, something, something) VALUES (1, 2, @PassInVariable);
INSERT INTO #TempTable(NewID) SELECT SCOPE_IDENTITY();
GO
INSERT INTO MyDBTable (something, something, something) (1, 2, @PassInVariable);
INSERT INTO #TempTable(NewID) SELECT SCOPE_IDENTITY();
SELECT * FROM #TempTable;
DROP TABLE #TempTable;
Вы приближаетесь к проблеме с неправильным решением. Вы можете сделать это, используя один запрос с использованием предложения 'OUTPUT' –