Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak naprawić „Lista wyboru dla instrukcji INSERT zawiera mniej elementów niż lista wstawiania”

Błąd SQL Server 120 występuje, gdy nie określisz wystarczającej liczby kolumn w INSERT lista przy użyciu SELECT listę wartości do wstawienia.

Mówiąc dokładniej, dzieje się tak, gdy używasz SELECT lista w INSERT oświadczenie, ale SELECT lista nie zwraca tylu kolumn, ile określasz za pomocą INSERT .

Łatwo to naprawić. Po prostu upewnij się, że liczba kolumn między INSERT jest taka sama. i SELECT lista.

Zły kod

Oto przykład kodu, który powoduje ten błąd.

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

Wynik:

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.

W tym przypadku określam trzy kolumny w moim INSERT , ale wybieram tylko dwie kolumny w moim SELECT lista.

Dobry kod

Oto jak naprawić powyższy błąd.

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

Wynik:

(5 rows affected)

Wszystko, co zrobiłem, to dodanie OrderDesc kolumnę do SELECT lista.

Określanie mniejszej liczby kolumn

Poprzedni przykład oczywiście zakłada, że ​​chciałem wstawić dodatkową kolumnę. Jeśli nie chcieliśmy, aby ta kolumna była wstawiana, powinniśmy ją usunąć z INSERT razem.

W ten sposób.

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

Jednak zależałoby to od tego, czy mamy jakikolwiek NOT NULL ograniczenia w tabeli docelowej.

Korzystanie z symboli wieloznacznych na liście SELECT

Możliwe jest również użycie gwiazdki (* ) symbol wieloznaczny w SELECT lista.

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

Chociaż nie jest to uważane za dobrą praktykę, ponieważ możesz przypadkowo wybrać niewłaściwe kolumny, mogą one być w złej kolejności itp.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nie można upuścić obiektu, ponieważ odwołuje się do niego ograniczenie KLUCZA OBCEGO — samouczek SQL Server / TSQL, część 74

  2. Funkcje a procedury składowane

  3. Czy INNER JOIN może zapewnić lepszą wydajność niż EXISTS?

  4. Operacja nie obowiązuje dla stanu błędu transakcji i zakresu transakcji

  5. Wewnętrzne elementy SQL Server:operatorzy problematyczni Pt. II – haszowanie