Gần đây tôi đã kế thừa cơ sở dữ liệu mà một trong các bảng có khóa chính bao gồm các giá trị được mã hóa (Part1 * 1000 + Part2).
Tôi đã chuẩn hóa cột đó, nhưng tôi không thể thay đổi các giá trị cũ. Vì vậy, bây giờ tôi cóCách tìm "lỗ" trong bảng
select ID from table order by ID
ID
100001
100002
101001
...
Tôi muốn tìm ra "lỗ hổng" trong bảng (chính xác hơn, các "lỗ" đầu tiên sau khi 100000) cho các hàng mới.
Tôi đang sử dụng lựa chọn sau đây, nhưng có cách nào tốt hơn để làm điều đó không?
select /* top 1 */ ID+1 as newID from table
where ID > 100000 and
ID + 1 not in (select ID from table)
order by ID
newID
100003
101029
...
Cơ sở dữ liệu là Microsoft SQL Server 2000. Tôi đồng ý với việc sử dụng các tiện ích mở rộng SQL.
Just ra khỏi tò mò, động lực cho việc tìm kiếm những "lỗ" là gì? Đây có phải là chìa khóa thông minh không? –
Cơ sở dữ liệu dành cho hệ thống kiểm soát truy cập tại nơi làm việc của tôi. Trong cơ sở dữ liệu cũ Part1 là một mã công ty và Part2 là một mã nhân viên. Nếu một người chuyển công ty, anh ta phải được cấp một thẻ mới. Hệ thống đọc thẻ cần 6 chữ số, vì vậy thẻ mới bắt đầu ở 100000, không bao gồm thẻ hiện tại. – pmg