Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cách khắc phục “Danh sách chọn cho câu lệnh INSERT chứa ít mục hơn danh sách chèn”

SQL Server lỗi 120 xảy ra khi bạn không chỉ định đủ cột trong INSERT của mình danh sách khi sử dụng SELECT danh sách các giá trị để chèn.

Cụ thể hơn, điều này xảy ra khi bạn sử dụng SELECT danh sách trong INSERT của bạn câu lệnh, nhưng SELECT danh sách không trả về nhiều cột như bạn đang chỉ định với INSERT .

Điều này rất dễ sửa chữa. Chỉ cần đảm bảo số cột khớp giữa INSERT của bạn và SELECT danh sách.

Mã lỗi

Dưới đây là một ví dụ về mã gây ra lỗi này.

INSERT INTO OrdersLatest (
    OrderId, 
    OrderDate, 
    OrderDesc
    )
SELECT 
    OrderId,
    OrderDate
FROM OrdersMarch;

Kết quả:

Msg 120, Level 15, State 1, Line 1
The select list for the INSERT statement contains fewer items than the insert list. The number of SELECT values must match the number of INSERT columns.

Trong trường hợp này, tôi chỉ định ba cột trong INSERT của mình , nhưng tôi chỉ chọn hai cột trong SELECT của mình danh sách.

Mã tốt

Dưới đây là cách khắc phục lỗi trên.

INSERT INTO OrdersLatest (
    OrderId, 
    OrderDate, 
    OrderDesc
    )
SELECT 
    OrderId,
    OrderDate, 
    OrderDesc
FROM OrdersMarch;

Kết quả:

(5 rows affected)

Tất cả những gì tôi đã làm là thêm OrderDesc vào cột SELECT danh sách.

Chỉ định ít cột hơn

Ví dụ trước rõ ràng giả định rằng tôi muốn chèn thêm cột. Nếu chúng tôi không muốn cột đó được chèn, thì chúng tôi nên xóa nó khỏi INSERT hoàn toàn.

Như thế này.

INSERT INTO OrdersLatest (
    OrderId, 
    OrderDate
    )
SELECT 
    OrderId,
    OrderDate
FROM OrdersMarch;

Tuy nhiên, điều này sẽ phụ thuộc vào việc chúng tôi có bất kỳ NOT NULL nào hay không các ràng buộc trên bảng đích.

Sử dụng ký tự đại diện trong danh sách CHỌN

Cũng có thể sử dụng dấu hoa thị (* ) ký tự đại diện trong SELECT danh sách.

INSERT INTO OrdersLatest (
    OrderDate, 
    OrderId, 
    OrderDesc
    )
SELECT *
FROM OrdersMarch;

Mặc dù đây không được coi là phương pháp hay vì bạn có thể vô tình chọn sai cột hoặc chúng có thể không đúng thứ tự, v.v.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tương đương với bigint trong C # là gì?

  2. Điền các ngày còn thiếu theo nhóm

  3. Làm thế nào để xử lý vệ sinh thoát khỏi các dấu ngoặc kép có thể bị đánh bại bởi SQL injection trong SQL Server?

  4. Lỗi máy chủ SQL:Dữ liệu chuỗi hoặc nhị phân sẽ bị cắt bớt

  5. SQL Server INFORMATION_SCHEMA Lượt xem | Xem nếu một bảng tồn tại