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.