Asegúrese de que los nombres de columna, los tipos de datos y el orden en la tabla desde la que selecciona los registros sean exactamente los mismos que en la tabla de destino. La única diferencia debería ser que la tabla de destino tiene una columna de identidad como la primera columna, que no está allí en la tabla de origen.
Estaba enfrentando un problema similar cuando estaba ejecutando "INSERT INTO table_Dest SELECT * FROM table_source_linked_server_excel". Las mesas tenían 115 columnas.
Tenía dos tablas de este tipo donde estaba cargando datos de Excel (como servidor vinculado) en tablas en la base de datos. En las tablas de la base de datos, había agregado una columna de identidad llamada 'id' que no estaba allí en Excel de origen. Para una tabla, la consulta se ejecutó correctamente y en otra recibí el error "Un valor explícito para la columna de identidad en la tabla solo se puede especificar cuando se usa una lista de columnas y IDENTITY_INSERT está en SQL Server". Esto fue desconcertante ya que el escenario era exactamente el mismo para ambas consultas. Así que investigué esto y lo que encontré fue que en la consulta donde recibía un error con INSERT INTO ... SELECT *:
- Se modificaron algunos de los nombres de columna en la tabla fuente, aunque los valores eran correctos
- Hubo algunas columnas adicionales más allá de las columnas de datos reales que fueron seleccionadas por SELECT *. Descubrí esto usando la opción de "Tabla de scripts como> Seleccionar para> nueva ventana de consulta" en la tabla de Excel de origen (en servidores vinculados). Había una columna oculta justo después de la última columna en Excel, aunque no tenía ningún dato. Eliminé esa columna en la tabla de origen de Excel y la guardé.
Después de hacer los dos cambios anteriores, la consulta INSERT INTO ... SELECT * se ejecutó correctamente. La columna de identidad en la tabla de destino generó valores de identidad para cada fila insertada como se esperaba.
Por lo tanto, aunque la tabla de destino puede tener una columna de identidad que no está en la tabla de origen, INSERT INTO ... SELECT * se ejecutará correctamente si los nombres, los tipos de datos y el orden de las columnas en el origen y el destino son exactamente los mismos.
Espero que ayude a alguien.