Hoewel het misschien lijkt dat minder code die moet worden verwerkt, u een prestatiewinst zou moeten opleveren, is het een slecht idee om de eerste optie (union all) te gebruiken. Alle select-instructies moeten worden geparseerd en uitgevoerd voordat de gegevens in een tabel worden ingevoegd. Het zal veel geheugen verbruiken en het kan een eeuwigheid duren voordat het klaar is, zelfs voor een vrij kleine hoeveelheid gegevens. Aan de andere kant worden afzonderlijke insert-statements "on the fly" uitgevoerd.
Voer een eenvoudige test uit in SSMS die dit zal bewijzen:maak een eenvoudige tabel met 4 velden en probeer 20k rijen in te voegen. De tweede oplossing wordt binnen enkele seconden uitgevoerd, terwijl de eerste... je zult zien :).
Een ander probleem is dat wanneer de gegevens in een bepaalde rij niet correct zijn (bijvoorbeeld niet-overeenkomend type), u een foutmelding krijgt zoals Conversion failed when converting the varchar value 'x' to data type int.
, maar je hebt geen indicatie welke rij is mislukt - je zou het zelf moeten vinden. Maar met aparte inserts weet je precies welke insert is mislukt.