SQL Server-fout 120 treedt op wanneer u niet genoeg kolommen opgeeft in uw INSERT
lijst bij gebruik van een SELECT
lijst voor de in te voegen waarden.
Om specifieker te zijn, het gebeurt wanneer u een SELECT
. gebruikt lijst in uw INSERT
statement, maar de SELECT
lijst retourneert niet zoveel kolommen als u opgeeft met de INSERT
.
Dit is eenvoudig op te lossen. Zorg ervoor dat het aantal kolommen overeenkomt tussen uw INSERT
en SELECT
lijst.
Slechte code
Hier is een voorbeeld van code die deze fout veroorzaakt.
INSERT INTO OrdersLatest (
OrderId,
OrderDate,
OrderDesc
)
SELECT
OrderId,
OrderDate
FROM OrdersMarch;
Resultaat:
Msg 120, Level 15, State 1, Line 1 The select list for the INSERT statement contains fewer items than the insert list. The number of SELECT values must match the number of INSERT columns.
In dit geval specificeer ik drie kolommen in mijn INSERT
, maar ik selecteer slechts twee kolommen in mijn SELECT
lijst.
Goede code
Hier leest u hoe u de bovenstaande fout kunt oplossen.
INSERT INTO OrdersLatest (
OrderId,
OrderDate,
OrderDesc
)
SELECT
OrderId,
OrderDate,
OrderDesc
FROM OrdersMarch;
Resultaat:
(5 rows affected)
Het enige wat ik deed was de OrderDesc
. toevoegen kolom naar de SELECT
lijst.
Minder kolommen specificeren
Het vorige voorbeeld gaat er uiteraard van uit dat ik de extra kolom wilde invoegen. Als we niet wilden dat die kolom werd ingevoegd, hadden we deze moeten verwijderen uit de INSERT
helemaal.
Vind dit leuk.
INSERT INTO OrdersLatest (
OrderId,
OrderDate
)
SELECT
OrderId,
OrderDate
FROM OrdersMarch;
Dit hangt er echter van af of we al dan niet een NOT NULL
. hebben beperkingen op de bestemmingstabel.
Een jokerteken gebruiken in de SELECT-lijst
Het is ook mogelijk om de asterisk (*
) jokerteken in de SELECT
lijst.
INSERT INTO OrdersLatest (
OrderDate,
OrderId,
OrderDesc
)
SELECT *
FROM OrdersMarch;
Hoewel dit niet als een goede gewoonte wordt beschouwd, aangezien u per ongeluk de verkeerde kolommen zou kunnen selecteren, of ze in de verkeerde volgorde zouden kunnen staan, enz.