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.