Vui lòng đảm bảo rằng tên cột, kiểu dữ liệu và thứ tự trong bảng từ nơi bạn đang chọn các bản ghi hoàn toàn giống với bảng đích. Chỉ có sự khác biệt là bảng đích có một cột định danh là cột đầu tiên, không có trong bảng nguồn.
Tôi đã phải đối mặt với vấn đề tương tự khi tôi đang thực hiện "INSERT INTO table_Dest CHỌN * TỪ bảng_source_linked_server_excel". Các bảng có 115 cột.
Tôi đã có hai bảng như vậy nơi tôi đang tải dữ liệu từ Excel (Là máy chủ được liên kết) vào các bảng trong cơ sở dữ liệu. Trong các bảng cơ sở dữ liệu, tôi đã thêm một cột định danh gọi là 'id' không có trong Excel nguồn. Đối với một bảng, truy vấn đã chạy thành công và trong một bảng khác tôi đã gặp lỗi "Giá trị rõ ràng cho cột định danh trong bảng chỉ có thể được chỉ định khi danh sách cột được sử dụng và IDENTITY_INSERT ở trên máy chủ SQL". Điều này thật khó hiểu vì kịch bản giống hệt nhau cho cả hai truy vấn. Vì vậy, tôi đã điều tra vấn đề này và điều tôi tìm thấy là trong truy vấn mà tôi gặp lỗi với INSERT INTO .. CHỌN *:
- Một số tên cột trong bảng nguồn đã được sửa đổi, mặc dù các giá trị là chính xác
- Có một số cột bổ sung ngoài các cột dữ liệu thực tế đang được chọn bởi SELECT *. Tôi đã phát hiện ra điều này bằng cách sử dụng tùy chọn "Bảng script như> Chọn vào> cửa sổ truy vấn mới" trên bảng Excel nguồn (bên dưới các máy chủ được liên kết). Có một cột ẩn ngay sau cột cuối cùng trong Excel, mặc dù nó không có bất kỳ dữ liệu nào. Tôi đã xóa cột đó trong bảng Excel nguồn và lưu nó.
Sau khi thực hiện hai thay đổi ở trên, truy vấn INSERT INTO ... SELECT * đã chạy thành công. Cột danh tính trong bảng đích đã tạo các giá trị nhận dạng cho mỗi hàng được chèn như mong đợi.
Vì vậy, mặc dù bảng đích có thể có cột nhận dạng không có trong bảng nguồn, nhưng CHERTN VÀO .. CHỌN * sẽ chạy thành công nếu tên, kiểu dữ liệu và thứ tự cột trong nguồn và đích giống hệt nhau.
Hy vọng nó sẽ giúp được ai đó.