2016-05-06 43 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)不同,请记住在完成后放下它。

也应该使用@@你表变量,

我希望这帮助