SQL Server-fejl 120 opstår, når du ikke angiver nok kolonner i din INSERT
liste, når du bruger en SELECT
liste for de værdier, der skal indsættes.
For at være mere specifik sker det, når du bruger en SELECT
liste i din INSERT
sætning, men SELECT
listen returnerer ikke så mange kolonner, som du angiver med INSERT
.
Dette er nemt at rette. Du skal blot sørge for, at antallet af kolonner stemmer overens mellem din INSERT
og SELECT
liste.
Dårlig kode
Her er et eksempel på kode, der forårsager denne fejl.
INSERT INTO OrdersLatest (
OrderId,
OrderDate,
OrderDesc
)
SELECT
OrderId,
OrderDate
FROM OrdersMarch;
Resultat:
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.
I dette tilfælde angiver jeg tre kolonner i min INSERT
, men jeg vælger kun to kolonner i min SELECT
liste.
God kode
Sådan rettes ovenstående fejl.
INSERT INTO OrdersLatest (
OrderId,
OrderDate,
OrderDesc
)
SELECT
OrderId,
OrderDate,
OrderDesc
FROM OrdersMarch;
Resultat:
(5 rows affected)
Alt jeg gjorde var at tilføje OrderDesc
kolonnen til SELECT
liste.
Angivelse af færre kolonner
Det foregående eksempel forudsætter naturligvis, at jeg ville indsætte den ekstra kolonne. Hvis vi ikke ønskede, at kolonnen skulle indsættes, så skulle vi have fjernet den fra INSERT
i det hele taget.
Sådan.
INSERT INTO OrdersLatest (
OrderId,
OrderDate
)
SELECT
OrderId,
OrderDate
FROM OrdersMarch;
Dette vil dog afhænge af, om vi har nogen NOT NULL
eller ej begrænsninger på destinationstabellen.
Brug af et jokertegn i SELECT-listen
Det er også muligt at bruge stjernen (*
) jokertegn i SELECT
liste.
INSERT INTO OrdersLatest (
OrderDate,
OrderId,
OrderDesc
)
SELECT *
FROM OrdersMarch;
Selvom dette ikke anses for god praksis, da du ved et uheld kan vælge de forkerte kolonner, eller de kan være i den forkerte rækkefølge osv.