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

Cara Memperbaiki "Daftar pilih untuk pernyataan INSERT berisi lebih sedikit item daripada daftar sisipan"

Kesalahan SQL Server 120 terjadi saat Anda tidak menentukan kolom yang cukup di INSERT daftar saat menggunakan SELECT daftar nilai yang akan disisipkan.

Untuk lebih spesifik, itu terjadi ketika Anda menggunakan SELECT daftar di INSERT pernyataan, tetapi SELECT list tidak mengembalikan kolom sebanyak yang Anda tentukan dengan INSERT .

Ini mudah untuk diperbaiki. Cukup pastikan jumlah kolom cocok antara INSERT your Anda dan SELECT daftar.

Kode Buruk

Berikut adalah contoh kode yang menyebabkan kesalahan ini.

INSERT INTO OrdersLatest (
    OrderId, 
    OrderDate, 
    OrderDesc
    )
SELECT 
    OrderId,
    OrderDate
FROM OrdersMarch;

Hasil:

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.

Dalam hal ini, saya menentukan tiga kolom di INSERT saya , tapi saya hanya memilih dua kolom di SELECT . saya daftar.

Kode Bagus

Berikut cara memperbaiki kesalahan di atas.

INSERT INTO OrdersLatest (
    OrderId, 
    OrderDate, 
    OrderDesc
    )
SELECT 
    OrderId,
    OrderDate, 
    OrderDesc
FROM OrdersMarch;

Hasil:

(5 rows affected)

Yang saya lakukan hanyalah menambahkan OrderDesc kolom ke SELECT daftar.

Menentukan Lebih Sedikit Kolom

Contoh sebelumnya jelas mengasumsikan bahwa saya ingin memasukkan kolom tambahan. Jika kita tidak ingin kolom tersebut disisipkan, maka kita harus menghapusnya dari INSERT sama sekali.

Seperti ini.

INSERT INTO OrdersLatest (
    OrderId, 
    OrderDate
    )
SELECT 
    OrderId,
    OrderDate
FROM OrdersMarch;

Namun, ini akan tergantung pada apakah kita memiliki NOT NULL . atau tidak batasan pada tabel tujuan.

Menggunakan Wildcard di Daftar SELECT

Anda juga dapat menggunakan tanda bintang (* ) wildcard di SELECT daftar.

INSERT INTO OrdersLatest (
    OrderDate, 
    OrderId, 
    OrderDesc
    )
SELECT *
FROM OrdersMarch;

Meskipun ini tidak dianggap sebagai praktik yang baik, karena Anda dapat secara tidak sengaja memilih kolom yang salah, atau urutannya mungkin salah, dll.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tingkatkan kinerja kueri SQL Server di tabel besar

  2. Dapatkan hari dalam seminggu di SQL Server 2005/2008

  3. Permintaan SQL untuk memilih tanggal di antara dua tanggal

  4. Cara Mengganti Nama Kolom atau Nama Tabel di SQL Server - Tutorial SQL Server / T-SQL Part 36

  5. Bagaimana cara memuat file XML ke dalam database menggunakan paket SSIS?