将表变量中的值插入已经存在的临时表中

时间:2016-05-06 21:54:40

标签: sql sql-server templates table-variable

我成功地将表变量中的值插入到新的(尚未存在的表)Temp Table中。插入少量行(例如10,000)时没有问题,但是当插入表变量时,很多行(例如30,000)会抛出错误"服务器内存和外部资源耗尽。 绕过这个问题: 我将我的(60,000)表变量行分成小批量(例如10,000),认为我可以将新数据插入到现有的临时表中,但我收到此错误消息:

已经有一个名为' ## 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

1 个答案:

答案 0 :(得分: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)不同,记得在完成后删除它。

你也应该为你的表变量使用@@,只使用@TableVariable

我希望这个帮助