Как я могу вставить 100000 строк в SQL Server?

INSERT INTO pantscolor_t (procode, color, pic) 
VALUES
('74251', 'Black', '511black.jpg'),
('74251', 'OD Green', '511odgreen.jpg'),
('74251', 'Black', '511black.jpg'),
('74251', 'OD Green', '511odgreen.jpg'),
('74251', 'Black', '511black.jpg'),
('74251', 'OD Green', '511odgreen.jpg'),
..........
..........
..........

INSERT INTO pantscolor_t (procode,color,pic)
VALUES
('74251', 'Charcoal', '511charcoal.jpg'),
('74251', 'Charcoal', '511charcoal.jpg'),
('74251', 'Charcoal', '511charcoal.jpg'),
('74251', 'Charcoal', '511charcoal.jpg'),
.............
.............
.............

 INSERT INTO........................
 INSERT INTO........................
 INSERT INTO........................
 INSERT INTO........................

У меня есть 100000 таких строк, но мои операторы вставки больше 1000. Когда я запускаю оператор SQL в SSMS, я получаю сообщение об ошибке:

Число значений строки выражений в операторе INSERT превышает максимально допустимое количество значений строк в 1000.

26
задан marc_s 29 December 2018 в 07:12
поделиться

3 ответа

Создайте CSV-файл (или некоторый файл с определенным разделителем полей и разделителем строк) и используйте опцию «BULK INSERT» для загрузки файла в базу данных. Файл может иметь 100000 строк; не будет никаких проблем с загрузкой огромного файла с помощью массовой загрузки.

http://msdn.microsoft.com/en-us/library/ms188365.aspx

19
ответ дан 28 November 2019 в 07:22
поделиться

Другим решением является использование запроса выбора с объединениями.

INSERT INTO pantscolor_t (procode,color,pic)
SELECT '74251', 'Black', '511black.jpg'
UNION ALL SELECT '74251', 'OD Green', '511odgreen.jpg'
UNION ALL SELECT '74251', 'Black', '511black.jpg'
UNION ALL SELECT '74251', 'OD Green', '511odgreen.jpg'
UNION ALL SELECT '74251', 'Black', '511black.jpg'
UNION ALL SELECT '74251', 'OD Green', '511odgreen.jpg'
--etc....

UNION ALL используется вместо UNION для ускорения запроса при работе с тысячами записей. UNION ALL допускает дублирование строк, тогда как UNION гарантирует, что дубликаты не существуют в наборе результатов. Для этого сценария мы не хотим удалять возможные дубликаты, поэтому используется UNION ALL.

21
ответ дан 28 November 2019 в 07:22
поделиться
INSERT mytable (col1, col2, col3, col4, col5, col6)
SELECT * FROM (VALUES
('1502577', '0', '114', 'chodba', 'Praha', 'Praha 1'),
('1503483', '0', 'TVP', 'chodba', 'Praha', 'Praha 2'),
/* ... more than 1000 rows ... */
('1608107', '0', '8', 'sklad', 'Tlumačov', 'Tlumačov'),
('1608107', '0', '9', 'sklad', 'Tlumačov', 'Tlumačov')
) AS temp (col1, col2, col3, col4, col5, col6);
-1
ответ дан 28 November 2019 в 07:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: