Tôi đang xử lý một bảng trong SQL Server có cột serial_no
, được định nghĩa là int không null. Nó dường như không phải là trường tăng tự động, như thể tôi để cột đó ra khỏi câu lệnh chèn của tôi, tôi nhận được một lỗi nói rằng trường serial_no
không thể rỗng.Máy chủ SQL: chèn tiếp theo có sẵn int
Vậy làm cách nào để chèn số sẵn có tiếp theo?
Tôi cố gắng này:
INSERT INTO mytable (serial_no) VALUES ((SELECT MAX(serial_no)+1 FROM mytable))
nhưng tôi nhận được một thông báo lỗi rằng các truy vấn con không thể được sử dụng trong bối cảnh này.
EDIT: Bảng này được sử dụng trong sản phẩm ngoài giá để tôi không thể thay đổi thiết kế và làm cho cột serial_no tăng tự động.
Nó có phải là duy nhất trên tất cả các hàng không ?? Các phương pháp được đề xuất trong các câu trả lời thường không an toàn đồng thời, ví dụ: bạn có thể kết thúc với bản sao ..... bạn hoặc cần phải a) làm cho điều này một cột 'INT IDENTITY' và để cho SQL Server lo lắng về nó, b) làm nhiều công việc hơn so với obviuos' SELECT MAX (serial_no) + 1', hoặc c) chờ cho SQL Server 2011 và sử dụng khái niệm 'SEQUENCES' –
marc_s, tôi hoàn toàn đồng ý, nhưng tiếc là tôi không thể thay đổi thiết kế DB. Điều gì xảy ra nếu tôi khóa bàn, hãy lắp và mở khóa? Điều đó có bảo vệ nó khỏi việc tạo ra một bản dupe không? Hoặc một truy vấn đang chờ đợi chỉ cần chờ khóa để giải phóng và sau đó chèn một bản sao # anyway? –
Bạn có thể chạy một dấu vết để xác định cách ứng dụng của bên thứ ba tạo giá trị và chỉ làm như vậy không? Tôi sẽ nói rằng nếu không có một cột nhận dạng họ có khả năng sử dụng một bảng để giữ giá trị tiếp theo. Có một câu trả lời đã đề cập đến kỹ thuật này rồi. –