sql >> Base de Datos >  >> RDS >> Sqlserver

Error 213 de SQL Server:el nombre de la columna o el número de valores proporcionados no coincide con la definición de la tabla.

El mensaje de error 213 es un error común que ocurre cuando intenta insertar valores en una tabla sin especificar explícitamente los nombres de las columnas.

El error se ve así:

Msg 213, Level 16, State 1, Line 1
Column name or number of supplied values does not match table definition.

Ocurre cuando especifica el número incorrecto de valores para esa tabla. En otras palabras, la cantidad de valores que proporciona no coincide con la cantidad de columnas de la tabla.

Ejemplo

Aquí hay un ejemplo para demostrarlo.

INSERT INTO Customers
VALUES ('Jake');

Resultado:

Msg 213, Level 16, State 1, Line 1
Column name or number of supplied values does not match table definition.

En mi caso, el problema es que la tabla en realidad contiene tres columnas. La definición de mi tabla se ve así:

CREATE TABLE Customers (
CustomerId int IDENTITY(1,1) NOT NULL,
FirstName nvarchar(255),
LastName nvarchar(255)
);

Estoy tratando de insertar un valor, pero SQL Server no sabe en qué columna debe ir, de ahí el error.

También obtendría el mismo error si intentara insertar demasiados valores. Por ejemplo, lo siguiente también produce el mismo error.

INSERT INTO Customers
VALUES ('Jake', 'Smith', 'New York', 'USA');

Resultado:

Msg 213, Level 16, State 1, Line 1
Column name or number of supplied values does not match table definition.

Cómo corregir el error

Una forma de solucionar esto es asegurarse de que la cantidad de valores que intenta insertar realmente coincida con la cantidad de columnas en la tabla.

Una mejor manera de hacerlo es especificar explícitamente los nombres de las columnas en su INSERT declaración. Hacer esto asegurará que no inserte datos accidentalmente en las columnas incorrectas.

Entonces, dependiendo de los valores que quiera insertar, podría reescribir mi ejemplo de esta manera:

INSERT INTO Customers (FirstName)
VALUES ('Jake');

O esto:

INSERT INTO Customers (FirstName, LastName)
VALUES ('Jake', 'Smith');

Nombres de columna implícitos

Como se mencionó, es mejor deletrear explícitamente el nombre de cada columna en su INSERT instrucción (como hice en el ejemplo anterior).

Sin embargo, podría cambiar mi ejemplo para usar nombres de columna implícitos, como este:

INSERT INTO Customers
VALUES (1, 'Jake', 'Smith');

Sin embargo, esto ahora podría causar un problema separado con respecto a la columna de identidad. Consulte Cómo insertar un valor explícito en una columna de identidad si necesita hacerlo.