sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan rettes "Vælglisten for INSERT-sætningen indeholder færre elementer end indsætningslisten"

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.


  1. 2 måder at returnere rækker, der kun indeholder ikke-alfanumeriske tegn i Oracle

  2. SÆT NAVNE utf8 i MySQL?

  3. Liste de forespørgsler, der kører på SQL Server

  4. Hvordan udfylder man manglende datoer i MySQL?