SQL Server Максимальные строки, которые могут быть вставлены в один элемент вставки

Я хочу сделать пакетную вставку, похожую на этот вопрос

Как сделать пакетную вставку в MySQL

  • В чем заключаются ограничения SQL Server на то, сколько строк может быть вставлено в один оператор insert?

  • Что происходит, когда, например, вставлено первое значение, а второе вызывает нарушение первичного ключа. Вернулись ли все инструкции INSERT?

INSERT INTO tbl_name (a,b) 
VALUES (1, 2), (1, 3));

Ответ 1

Максимальное количество строк, которые вы можете вставить в один оператор, составляет 1000 при использовании INSERT INTO ... VALUES... i.e.

INSERT INTO TableName( Colum1)
VALUES (1),
       (2),
       (3),...... upto 1000 rows. 

Но если вы используете инструкцию SELECT для вставки строк в таблицу, для этого нет предела, что-то вроде...

INSERT INTO TableName (ColName)
Select Col FROM AnotherTable

Теперь перейдем к вашему второму вопросу. Что происходит, когда во время вставки возникает ошибка.

Хорошо, если вы вставляете строки с использованием многозначной конструкции

INSERT INTO TableName( Colum1)
VALUES (1),
       (2),
       (3)

В приведенном выше сценарии, если какая-либо вставка строки вызывает ошибку, весь оператор будет откат и ни одна из строк не будет вставлена.

Но если вы вставляете строки с отдельным оператором для каждой строки, то есть...

INSERT INTO TableName( Colum1) VALUES (1)
INSERT INTO TableName( Colum1) VALUES (2)
INSERT INTO TableName( Colum1) VALUES (3)

В приведенном выше случае каждая вставка строки представляет собой отдельный оператор, и если какая-либо вставка строки вызвала ошибку, то только конкретный оператор вставки будет откат, остальные будут успешно вставлены.

Ответ 2

Хотя максимальное значение составляет 1000, было продемонстрировано, что производительность начинает снижаться при значительно меньших значениях. Евгений Филиппов написал отличную статью, исследующую эту тему:

https://www.red-gate.com/simple-talk/sql/performance/comparing-multiple-rows-insert-vs-single-row-insert-with-three-data-load-methods/

Подводя итог, автор сделал некоторые очень хорошо продуманные эксперименты и нашел сладкое пятно около 25 лет. YMMV.