Chociaż może się wydawać, że mniej kodu do przetworzenia powinno dać Ci wzrost wydajności, używanie pierwszej opcji (union all) jest złym pomysłem. Wszystkie instrukcje select muszą zostać przeanalizowane i wykonane przed wstawieniem danych do tabeli. Zużywa dużo pamięci i może trwać wiecznie, nawet w przypadku dość małej ilości danych. Z drugiej strony oddzielne instrukcje wstawiania są wykonywane "w locie".
Uruchom prosty test w SSMS, który to udowodni:utwórz prostą tabelę z 4 polami i spróbuj wstawić 20 tys. wierszy. Drugie rozwiązanie zostanie wykonane za kilka sekund, podczas gdy pierwsze... zobaczysz :).
Innym problemem jest to, że gdy dane w wierszu som są nieprawidłowe (na przykład niezgodność typów), otrzymasz błąd, taki jak Conversion failed when converting the varchar value 'x' to data type int.
, ale nie będziesz miał żadnej wskazówki, który wiersz się nie powiódł - musiałbyś sam go znaleźć. Ale dzięki osobnym wstawkom będziesz dokładnie wiedzieć, która wstawka się nie powiodła.