2016-05-06 12 views
2

Я успешно вставляю значения из таблицы Variable в новую таблицу (Temp Table) (еще не существующую таблицу). Не возникают проблемы при вставке небольшого количества строк (например, 10 000), но при вставке в переменную таблицы много строк (например, 30 000) выдает ошибку «Сервер закончил работу с памятью и внешними ресурсами». Чтобы ходить проблема: Я разделил таблицы (Variable rows) на небольшие партии (например, 10 000) каждый, думая, что могу вставить новые данные в уже существующую таблицу Temp, но я получаю это сообщение об ошибке:Вставка значений из таблицы Переменная в уже существующую таблицу 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

Я думаю, что это предел сценариев. –

+0

Помните @@ Таблицы хранятся в памяти, поэтому, если у вас есть сообщение «OutOfmemory», возможно, у вас недостаточно памяти. Я предложил создать pyhiscal tempTable (без таблицы @@), если вы можете, и проверить, получаете ли вы одно и то же сообщение. – Beto

+0

У вас нет разрешения на создание чего-либо ... По какой-либо причине вы знаете, могу ли я добавить новые данные в существующий TempTable из источника таблицы Variable? – 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) и не забудьте оставить его, когда закончите.

также вы должны НЕ использования @@ для вас таблицы переменных, используйте только @TableVariable

Я надеюсь, что эта помощь