Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Errore 213 di SQL Server:il nome della colonna o il numero di valori forniti non corrisponde alla definizione della tabella.

Il messaggio di errore 213 è un errore comune che si verifica quando si tenta di inserire valori in una tabella senza specificare in modo esplicito i nomi di colonna.

L'errore è simile al seguente:

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

Si verifica quando si specifica il numero errato di valori per quella tabella. In altre parole, il numero di valori che fornisci non corrisponde al numero di colonne nella tabella.

Esempio

Ecco un esempio da dimostrare.

INSERT INTO Customers
VALUES ('Jake');

Risultato:

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

Nel mio caso, il problema è che la tabella contiene effettivamente tre colonne. La mia definizione di tabella è simile a questa:

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

Sto cercando di inserire un valore, ma SQL Server non sa in quale colonna dovrebbe andare, da qui l'errore.

Riceverei lo stesso errore anche se provassi a inserire troppi valori. Ad esempio, anche quanto segue produce lo stesso errore.

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

Risultato:

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

Come correggere l'errore

Un modo per risolvere questo problema è assicurarsi che il numero di valori che si tenta di inserire corrisponda effettivamente al numero di colonne nella tabella.

Un modo migliore per farlo è specificare esplicitamente i nomi delle colonne nel tuo INSERT dichiarazione. In questo modo ti assicurerai di non inserire accidentalmente dati nelle colonne sbagliate.

Quindi, a seconda dei valori che voglio inserire, potrei riscrivere il mio esempio in questo:

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

O questo:

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

Nomi di colonna impliciti

Come accennato, è meglio scrivere in modo esplicito il nome di ogni colonna nel tuo INSERT dichiarazione (come ho fatto nell'esempio precedente).

Tuttavia, potrei modificare il mio esempio per utilizzare nomi di colonne impliciti, come questo:

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

Tuttavia, ciò potrebbe ora causare un problema separato relativo alla colonna dell'identità. Se è necessario, vedere Come inserire un valore esplicito in una colonna Identity.