El error 120 de SQL Server ocurre cuando no especifica suficientes columnas en su INSERT
lista cuando se usa un SELECT
lista de los valores a insertar.
Para ser más específicos, sucede cuando usas un SELECT
lista en su INSERT
declaración, pero el SELECT
la lista no devuelve tantas columnas como está especificando con INSERT
.
Esto es fácil de arreglar. Simplemente asegúrese de que el número de columnas coincida entre su INSERT
y SELECT
lista.
Código incorrecto
Aquí hay un ejemplo de código que causa este error.
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.
En este caso, especifico tres columnas en mi INSERT
, pero solo selecciono dos columnas en mi SELECT
lista.
Buen código
Aquí se explica cómo corregir el error anterior.
INSERT INTO OrdersLatest (
OrderId,
OrderDate,
OrderDesc
)
SELECT
OrderId,
OrderDate,
OrderDesc
FROM OrdersMarch;
Resultado:
(5 rows affected)
Todo lo que hice fue agregar el OrderDesc
columna a SELECT
lista.
Especificar menos columnas
El ejemplo anterior obviamente asume que quería insertar la columna adicional. Si no queríamos que se insertara esa columna, deberíamos haberla eliminado de INSERT
en total.
Así.
INSERT INTO OrdersLatest (
OrderId,
OrderDate
)
SELECT
OrderId,
OrderDate
FROM OrdersMarch;
Sin embargo, esto dependería de si tenemos o no algún NOT NULL
restricciones en la tabla de destino.
Uso de un comodín en la lista SELECT
También es posible utilizar el asterisco (*
) comodín en SELECT
lista.
INSERT INTO OrdersLatest (
OrderDate,
OrderId,
OrderDesc
)
SELECT *
FROM OrdersMarch;
Aunque esto no se considera una buena práctica, ya que podría seleccionar accidentalmente las columnas incorrectas, o podrían estar en el orden incorrecto, etc.