Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да коригирате „Списъкът за избор за оператора INSERT съдържа по-малко елементи от списъка за вмъкване“

Грешка 120 на SQL Server възниква, когато не посочите достатъчно колони във вашия INSERT списък, когато използвате SELECT списък със стойностите за вмъкване.

За да бъдем по-конкретни, това се случва, когато използвате SELECT списък във вашия INSERT оператор, но SELECT list не връща толкова колони, колкото сте посочили с INSERT .

Това е лесно за поправяне. Просто се уверете, че броят на колоните съвпада между вашия INSERT и SELECT списък.

Лош код

Ето пример за код, който причинява тази грешка.

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

Резултат:

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.

В този случай посочвам три колони в моя INSERT , но избирам само две колони в моя SELECT списък.

Добър код

Ето как да коригирате горната грешка.

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

Резултат:

(5 rows affected)

Всичко, което направих, беше да добавя OrderDesc колона към SELECT списък.

Указване на по-малко колони

Предишният пример очевидно предполага, че исках да вмъкна допълнителната колона. Ако не искаме тази колона да бъде вмъкната, трябваше да я премахнем от INSERT като цяло.

Като това.

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

Това обаче ще зависи от това дали имаме или не NOT NULL ограничения върху таблицата на дестинацията.

Използване на заместващ знак в списъка SELECT

Възможно е също да използвате звездичката (* ) заместващ знак в SELECT списък.

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

Въпреки че това не се счита за добра практика, тъй като може случайно да изберете грешни колони или да са в грешен ред и т.н.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да създадете множество едно към едно

  2. SQL Server блокира достъпа до процедурата 'sys.sp_OACreate' на компонента 'Ole Automation Procedures'

  3. ROLLBACK TRUNCATE в SQL Server

  4. конвертирайте серийния номер на датата на Excel в обикновена дата

  5. Филтриране по опции OFFSET-FETCH в заявка за избор - SQL Server / TSQL урок, част 118