sql >> Databáze >  >> RDS >> Sqlserver

Jak opravit „Seznam výběru pro příkaz INSERT obsahuje méně položek než seznam vložení“

Chyba SQL Server 120 nastane, když neurčíte dostatek sloupců v INSERT seznam při použití SELECT seznam hodnot, které se mají vložit.

Přesněji řečeno, stane se to, když použijete SELECT seznam ve vašem INSERT příkaz, ale SELECT seznam nevrací tolik sloupců, kolik zadáváte pomocí INSERT .

To lze snadno opravit. Jednoduše se ujistěte, že počet sloupců mezi vašimi INSERT odpovídá a SELECT seznam.

Špatný kód

Zde je příklad kódu, který tuto chybu způsobuje.

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

Výsledek:

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.

V tomto případě specifikuji tři sloupce v INSERT , ale ve svém SELECT vyberu pouze dva sloupce seznam.

Dobrý kód

Zde je návod, jak opravit výše uvedenou chybu.

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

Výsledek:

(5 rows affected)

Vše, co jsem udělal, bylo přidat OrderDesc do SELECT seznam.

Určení méně sloupců

Předchozí příklad samozřejmě předpokládá, že jsem chtěl vložit sloupec navíc. Pokud jsme nechtěli, aby byl tento sloupec vložen, měli jsme jej odstranit z INSERT celkem.

Takhle.

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

To by však záviselo na tom, zda máme nebo nemáme nějaké NOT NULL omezení na cílové tabulce.

Použití zástupného znaku v seznamu SELECT

Je také možné použít hvězdičku (* ) zástupný znak v SELECT seznam.

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

Ačkoli to není považováno za osvědčený postup, protože byste mohli náhodně vybrat nesprávné sloupce nebo by mohly být ve špatném pořadí atd.


  1. Neuspořádané výsledky v SQL

  2. Oprava „Aritmetická chyba přetečení při převodu výrazu na datový typ int“ v SQL Server

  3. Délka indexu varchar MySQL

  4. Funkce LEAST() v PostgreSQL