T-sql вставка большого количества данных проблема - PullRequest
1 голос
/ 08 ноября 2010

Вот моя дилемма,

8 стол

До 72 столбцов

Включая типы данных int, smallint, decimal, smalldatetime, char

Ничего страшного там нет.

Я создал уникальные наборы данных: 100 строк, 1000 строк, 10000 строк, 50000 строк, 100000 строк, 500000 строк, но они в операторах вставки. Это для объемного тестирования.

При попытке выполнить запрос 50K серверу sql не хватило памяти.

Какие у меня варианты! Нужно ли будет разбивать на небольшие запросы; я могу зафиксировать каждые X строк и как я могу определить максимальную строку, есть ли лучший способ, чем вставить операторы>? Excel и доступ исключены из-за большого объема данных.

Имеет ли пример оператор t-sql цикла цикла для создания данных различных типов?

Ответы [ 5 ]

3 голосов
/ 08 ноября 2010

Разделить части операторов вставки с ключевым словом "GO".Это закончит одну партию и начнет другую.Для простоты генерации теста будет нормальным делить каждую строку с помощью «GO».

insert into XXX (1, 2, 3, ...)
...
insert into XXX (2, 3, 4, ...)
GO
insert into XXX (3, 4, 5, ...)
...
insert into XXX (4, 5, 6, ...)
GO

или

insert into XXX (1, 2, 3, ...)
GO
insert into XXX (2, 3, 4, ...)
GO
insert into XXX (3, 4, 5, ...)
GO
2 голосов
/ 08 ноября 2010

BULK INSERT именно для этого типа сценария - загрузка больших объемов данных в SQL-сервер.Почему он эффективнее и быстрее обычных вставок?Поскольку B-деревья строятся снизу вверх вместо обычного подхода вставки и разделения сверху вниз.

0 голосов
/ 09 ноября 2010

Используйте SSIS и в DataFlowTask есть возможность указать размер пакета.

0 голосов
/ 09 ноября 2010

Поскольку вы используете .NET Framework, вам, вероятно, следует обратиться к параметру updateBatchSize в адаптере данных. Он позаботится о многих внутренних органах для вас. Дополнительная информация @ msdn.microsoft.com / ru-ru / library / kbbwt18a (VS.80) .aspx

0 голосов
/ 08 ноября 2010

"Имеется ли пример оператора t-sql цикла цикла для создания данных разных типов?"

Петля также доступна.

declare @i int
set @i = 0
while @i<50000
begin
  set @i = @i+1
  insert into XXX (@i, 1, 2, 3)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...