sql >> Databasteknik >  >> RDS >> Sqlserver

Så här fixar du "Väljlistan för INSERT-satsen innehåller färre objekt än infogningslistan"

SQL Server-fel 120 uppstår när du inte anger tillräckligt många kolumner i din INSERT lista när du använder en SELECT lista för de värden som ska infogas.

För att vara mer specifik händer det när du använder en SELECT lista i din INSERT satsen, men SELECT list returnerar inte så många kolumner som du anger med INSERT .

Detta är lätt att fixa. Se bara till att antalet kolumner matchar din INSERT och SELECT lista.

Dålig kod

Här är ett exempel på kod som orsakar detta fel.

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 det här fallet anger jag tre kolumner i min INSERT , men jag väljer bara två kolumner i min SELECT lista.

Bra kod

Så här åtgärdar du ovanstående fel.

INSERT INTO OrdersLatest (
    OrderId, 
    OrderDate, 
    OrderDesc
    )
SELECT 
    OrderId,
    OrderDate, 
    OrderDesc
FROM OrdersMarch;

Resultat:

(5 rows affected)

Allt jag gjorde var att lägga till OrderDesc kolumnen till SELECT lista.

Ange färre kolumner

Det föregående exemplet förutsätter uppenbarligen att jag ville infoga den extra kolumnen. Om vi ​​inte ville att den kolumnen skulle infogas borde vi ha tagit bort den från INSERT totalt.

Så här.

INSERT INTO OrdersLatest (
    OrderId, 
    OrderDate
    )
SELECT 
    OrderId,
    OrderDate
FROM OrdersMarch;

Detta beror dock på om vi har någon NOT NULL eller inte begränsningar på destinationstabellen.

Använda ett jokertecken i SELECT-listan

Det är också möjligt att använda asterisken (* ) jokertecken i SELECT lista.

INSERT INTO OrdersLatest (
    OrderDate, 
    OrderId, 
    OrderDesc
    )
SELECT *
FROM OrdersMarch;

Även om detta inte anses vara god praxis, eftersom du av misstag kan välja fel kolumner, eller så kan de hamna i fel ordning osv.


  1. PostgreSQL Skapa funktion

  2. Grunderna för att hantera datafiler i SQL Server

  3. Hur man inaktiverar strikt SQL-läge i MySQL 5.7

  4. Ta bort förälder om den inte hänvisas till av något annat barn