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.