Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como corrigir “A lista de seleção para a instrução INSERT contém menos itens do que a lista de inserção”


O erro 120 do SQL Server ocorre quando você não especifica colunas suficientes em seu INSERT lista ao usar um SELECT lista para os valores a serem inseridos.

Para ser mais específico, isso acontece quando você usa um SELECT lista em seu INSERT instrução, mas o SELECT list não retorna tantas colunas quanto você está especificando com o INSERT .

Isso é fácil de corrigir. Apenas certifique-se de que o número de colunas corresponda ao seu INSERT e SELECT Lista.

Código incorreto


Aqui está um exemplo de código que causa esse erro.
INSERT INTO OrdersLatest (
    OrderId, 
    OrderDate, 
    OrderDesc
    )
SELECT 
    OrderId,
    OrderDate
FROM OrdersMarch;

Resultado:
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.

Nesse caso, especifico três colunas no meu INSERT , mas só seleciono duas colunas no meu SELECT Lista.

Bom Código


Veja como corrigir o erro acima.
INSERT INTO OrdersLatest (
    OrderId, 
    OrderDate, 
    OrderDesc
    )
SELECT 
    OrderId,
    OrderDate, 
    OrderDesc
FROM OrdersMarch;

Resultado:
(5 rows affected)

Tudo o que fiz foi adicionar o OrderDesc coluna para o SELECT Lista.

Especificando menos colunas


O exemplo anterior obviamente assume que eu queria inserir a coluna extra. Se não queríamos que essa coluna fosse inserida, deveríamos tê-la removido do INSERT completamente.

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

No entanto, isso dependeria se temos ou não algum NOT NULL restrições na tabela de destino.

Usando um curinga na lista SELECT


Também é possível usar o asterisco (* ) curinga no SELECT Lista.
INSERT INTO OrdersLatest (
    OrderDate, 
    OrderId, 
    OrderDesc
    )
SELECT *
FROM OrdersMarch;

Embora isso não seja considerado uma boa prática, pois você pode selecionar acidentalmente as colunas erradas ou elas podem estar na ordem errada etc.