2016-05-06 41 views
2

我成功地將表變量的值插入到新的(尚不存在的表)Temp表中。在插入少量行(例如10,000)時沒有問題,但是當插入到表變量中時,很多行(例如30,000)會引發錯誤「服務器耗盡內存和外部資源」 問題: 我將我的(60,000)表變量行分成小批量(例如10,000),認爲我可以將新數據插入到已經存在的Temp Table中,但是我收到以下錯誤消息:從表變量插入已經存在的Temp表

。已在數據庫中名爲 '##不是Temptable' 對象

我的代碼是:

USE MyDataBase; 
Go 

Declare @@TableVariable TABLE 
(
[ID] bigint PRIMARY KEY, 
[BLD_ID] int NOT NULL 
-- 25 more columns 
) 
Insert Into @@TableVariable VALUES 
(1,25), 
(2,30) 
-- 61,000 more rows 

Select * Into #TempTable From @@TableVariable; 
Select Count(*) From #TempTable; 

下面是錯誤消息我得到

enter image description here

+0

我的猜測是,這是對腳本的限制只使用@TableVariable。 –

+0

記住@@表格存儲在內存中,所以如果你有一個消息「OutOfmemory」,也許你沒有足夠的內存。如果可以的話,我建議創建一個pyhiscal tempTable(沒有@@表),並檢查是否收到相同的消息。 – Beto

+0

沒有創建任何權限...通過任何機會,您是否知道我是否可以將新數據添加到來自表變量源的現有TempTable中? – enigma6205

回答

0

的問題是,SELECT INTO想要創建目標表,所以在第二次運行你的錯誤。

首先你要創建#TempTable:

/* this creates the temptable copying the @TableVariable structure*/ 
Select * 
Into #TempTable 
From @TableVariable 
where 1=0; 

現在你可以通過你的批次循環,並呼籲該填入你想多次..

insert Into #TempTable 
Select * From @TableVariable; 

注意的是#TempTable與## TempTable(#= Local,## = Global)不同,請記住在完成後放下它。

也應該使用@@你表變量,

我希望這幫助