Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Kesalahan SQL Server 213:Nama kolom atau jumlah nilai yang diberikan tidak sesuai dengan definisi tabel.

Pesan galat 213 adalah galat umum yang terjadi saat Anda mencoba memasukkan nilai ke dalam tabel tanpa secara eksplisit menentukan nama kolom.

Kesalahannya terlihat seperti ini:

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

Itu terjadi ketika Anda menentukan jumlah nilai yang salah untuk tabel itu. Dengan kata lain, jumlah nilai yang Anda berikan tidak sesuai dengan jumlah kolom dalam tabel.

Contoh

Berikut ini contoh untuk didemonstrasikan.

INSERT INTO Customers
VALUES ('Jake');

Hasil:

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

Dalam kasus saya, masalahnya adalah tabel tersebut sebenarnya berisi tiga kolom. Definisi tabel saya terlihat seperti ini:

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

Saya mencoba memasukkan nilai, tetapi SQL Server tidak tahu kolom mana yang harus dimasukkan, karena itu kesalahannya.

Saya juga akan mendapatkan kesalahan yang sama jika saya mencoba memasukkan terlalu banyak nilai. Misalnya, berikut ini juga menghasilkan kesalahan yang sama.

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

Hasil:

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

Cara Memperbaiki Kesalahan

Salah satu cara untuk memperbaikinya, adalah memastikan bahwa jumlah nilai yang Anda coba masukkan benar-benar cocok dengan jumlah kolom dalam tabel.

Cara yang lebih baik untuk melakukannya adalah secara eksplisit menentukan nama kolom di INSERT . Anda penyataan. Melakukan ini akan memastikan Anda tidak secara tidak sengaja memasukkan data ke kolom yang salah.

Jadi tergantung pada nilai mana yang ingin saya masukkan, saya dapat menulis ulang contoh saya menjadi ini:

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

Atau ini:

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

Nama Kolom Tersirat

Seperti yang disebutkan, lebih baik untuk secara eksplisit mengeja setiap nama kolom di INSERT Anda pernyataan (seperti yang saya lakukan pada contoh sebelumnya).

Namun saya dapat, mengubah contoh saya untuk menggunakan nama kolom implisit, seperti ini:

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

Namun, ini sekarang dapat menyebabkan masalah terpisah terkait kolom identitas. Lihat Cara Menyisipkan Nilai Eksplisit ke dalam Kolom Identitas jika Anda perlu melakukannya.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa itu Pemblokiran SQL Server?

  2. SQL Server REPLACE() vs TRANSLATE():Apa Perbedaannya?

  3. Fungsi vs Prosedur Tersimpan

  4. Bagaimana saya bisa menanyakan nilai di kolom SQL Server XML?

  5. Dapatkah INNER JOIN menawarkan kinerja yang lebih baik daripada EXISTS