Pastikan bahwa nama kolom, tipe data, dan urutan dalam tabel dari mana Anda memilih catatan sama persis dengan tabel tujuan. Hanya perbedaan yang seharusnya tabel tujuan memiliki kolom identitas sebagai kolom pertama, yang tidak ada di tabel sumber.
Saya menghadapi masalah serupa ketika saya menjalankan "INSERT INTO table_Dest SELECT * FROM table_source_linked_server_excel". Tabel memiliki 115 kolom.
Saya punya dua tabel di mana saya memuat data dari Excel (Sebagai server yang ditautkan) ke dalam tabel dalam database. Dalam tabel database, saya telah menambahkan kolom identitas yang disebut 'id' yang tidak ada di sumber Excel. Untuk satu tabel kueri berjalan dengan sukses dan di lain saya mendapat kesalahan "Nilai eksplisit untuk kolom identitas dalam tabel hanya dapat ditentukan ketika daftar kolom digunakan dan IDENTITY_INSERT adalah ON SQL Server". Ini membingungkan karena skenario persis sama untuk kedua pertanyaan. Jadi saya menyelidiki ini dan apa yang saya temukan adalah bahwa dalam kueri di mana saya mendapatkan kesalahan dengan INSERT INTO .. SELECT *:
- Beberapa nama kolom dalam tabel sumber diubah, meskipun nilainya benar
- Ada beberapa kolom tambahan di luar kolom data aktual yang dipilih oleh SELECT *. Saya menemukan ini dengan menggunakan opsi "Tabel skrip sebagai> Pilih ke> jendela kueri baru" pada tabel Excel sumber (di bawah server tertaut). Ada satu kolom tersembunyi tepat setelah kolom terakhir di Excel, meskipun tidak memiliki data. Saya menghapus kolom itu di tabel Excel sumber dan menyimpannya.
Setelah melakukan dua perubahan di atas, kueri untuk INSERT INTO ... SELECT * berhasil dijalankan. Kolom identitas di tabel tujuan menghasilkan nilai identitas untuk setiap baris yang dimasukkan seperti yang diharapkan.
Jadi, meskipun tabel tujuan mungkin memiliki kolom identitas yang tidak ada di tabel sumber, INSERT INTO .. SELECT * akan berjalan dengan sukses jika nama, tipe data, dan urutan kolom dalam sumber dan tujuan sama persis.
Semoga ini bisa membantu seseorang.