Lütfen kayıtları seçtiğiniz tablodaki sütun adlarının, veri türlerinin ve sıralarının hedef tabloyla tamamen aynı olduğundan emin olun. Tek fark, hedef tablonun ilk sütun olarak bir kimlik sütunu olması, kaynak tabloda bulunmamasıdır.
"INSERT INTO table_Dest SELECT * FROM table_source_linked_server_excel" yürütürken benzer sorunla karşı karşıya kaldım. Tablolarda 115 sütun vardı.
Ben veritabanında tablolara Excel (bağlı sunucu olarak) veri yüklerken böyle iki tablo vardı. Veritabanı tablolarında, kaynak Excel'de olmayan 'id' adlı bir kimlik sütunu ekledim. Bir tablo için sorgu başarıyla çalışıyordu ve diğerinde "Tablodaki kimlik sütunu için açık bir değer yalnızca bir sütun listesi kullanıldığında ve IDENTITY_INSERT ON SQL Server olduğunda belirlenebilir" hatasını aldım. Senaryo her iki sorgu için de tam olarak aynı olduğu için bu şaşırtıcıydı. Bu yüzden araştırdım ve bulduğum sorguda INSERT INTO ile hata alıyordum oldu .. SELECT *:
- Kaynak tablodaki sütun adlarından bazıları değiştirildi, ancak değerler doğru
- SELECT * tarafından seçilen gerçek veri sütunlarının ötesinde bazı ekstra sütunlar vardı. Bunu kaynak Excel tablosunda (bağlantılı sunucular altında) "Komut dosyası tablosu> Seçmek için> yeni sorgu penceresi" seçeneğini kullanarak keşfettim. Veri içermese de, Excel'deki son sütundan hemen sonra bir gizli sütun vardı. Bu sütunu kaynak Excel tablosunda sildim ve kaydettim.
Yukarıdaki iki değişikliği yaptıktan sonra INSERT INTO ... SELECT * sorgusu başarıyla çalıştırıldı. Hedef tablodaki kimlik sütunu, eklenen her satır için beklendiği gibi kimlik değerleri oluşturdu.
Bu nedenle, hedef tablo kaynak tabloda bulunmayan bir kimlik sütununa sahip olsa da, kaynak ve hedefteki adlar, veri türleri ve sütun sırası tamamen aynı ise, INSERT INTO .. SELECT * başarıyla çalışacaktır.
Umarım birine yardımcı olur.