Upewnij się, że nazwy kolumn, typy danych i kolejność w tabeli, z której wybierasz rekordy, są dokładnie takie same jak w tabeli docelowej. Jedyną różnicą powinno być to, że tabela docelowa ma kolumnę tożsamości jako pierwszą kolumnę, której nie ma w tabeli źródłowej.
Miałem podobny problem podczas wykonywania polecenia „INSERT INTO table_Dest SELECT * FROM table_source_linked_server_excel”. Tabele miały 115 kolumn.
Miałem dwie takie tabele, w których ładowałem dane z Excela (jako serwer połączony) do tabel w bazie danych. W tabelach bazy danych dodałem kolumnę tożsamości o nazwie „id”, której nie było w źródłowym programie Excel. W przypadku jednej tabeli zapytanie zakończyło się powodzeniem, aw innej wystąpił błąd „Wyraźną wartość kolumny tożsamości w tabeli można określić tylko wtedy, gdy używana jest lista kolumn, a IDENTITY_INSERT znajduje się na serwerze SQL”. To było zagadkowe, ponieważ scenariusz był dokładnie taki sam dla obu zapytań. Sprawdziłem to i znalazłem to w zapytaniu, w którym pojawiał się błąd z INSERT INTO .. WYBIERZ *:
- Niektóre nazwy kolumn w tabeli źródłowej zostały zmodyfikowane, chociaż wartości były prawidłowe
- Było kilka dodatkowych kolumn poza rzeczywistymi kolumnami danych, które były wybierane przez SELECT *. Odkryłem to, używając opcji „Tabela skryptów jako> Wybierz do> nowe okno zapytania” w źródłowej tabeli programu Excel (pod połączonymi serwerami). Była jedna ukryta kolumna tuż za ostatnią kolumną w Excelu, chociaż nie miała żadnych danych. Usunąłem tę kolumnę w źródłowej tabeli programu Excel i zapisałem ją.
Po wprowadzeniu powyższych dwóch zmian zapytanie INSERT INTO ... SELECT * zostało uruchomione pomyślnie. Kolumna tożsamości w tabeli docelowej wygenerowała wartości tożsamości dla każdego wstawionego wiersza zgodnie z oczekiwaniami.
Tak więc, mimo że tabela docelowa może mieć kolumnę tożsamości, której nie ma w tabeli źródłowej, INSERT INTO .. SELECT * uruchomi się pomyślnie, jeśli nazwy, typy danych i kolejność kolumn w źródle i miejscu docelowym są dokładnie takie same.
Mam nadzieję, że to komuś pomoże.