我有140,000條INSERT語句需要運行。我試圖將記錄插入到數據庫表中,然後將創建的PK輸入到一個臨時表中,然後返回。它看起來是這樣的:存儲過程中的臨時表在首次執行後不可用
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條INSERT語句和這樣完美的作品,但我想是因爲報表在這個特定的SP它給數我在嘗試創建過程時發現「查詢已完成且出錯」,但實際上並未創建過程。
然後我每增加一個GO插入語句,但在第一個GO執行後,必須釋放臨時表並且我得到「TempTable is unavailable」錯誤(我也在第一個GO之後爲@PassInVariable獲取了相同的錯誤執行)。奇怪的是,當我將上面解釋的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'子句 –