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.