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.