Как я могу вставить 100000 строк в SQL Server? - PullRequest
23 голосов
/ 12 октября 2011
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 значений строк.

Ответы [ 3 ]

20 голосов
/ 04 января 2016

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

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.

19 голосов
/ 12 октября 2011

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

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

2 голосов
/ 24 октября 2017

Применяя следующее, вы не должны иметь никакой ошибки:

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

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

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

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

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

...........

Я попробовал это, и это сработало, конечно, вы можете использовать Excel для простого объединения значений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...