Tôi có một yêu cầu kinh doanh rằng mỗi bản ghi trong bảng Hóa đơn có một id trông giống như YYYYNNNNNN.
Phần NNNNNN cần khởi động lại vào đầu mỗi năm. Vì vậy, hàng đầu tiên được nhập vào năm 2016 sẽ trông giống như 2016000001 và hàng thứ hai như 2016000002, v.v. Hãy nói rằng bản ghi cuối cùng của năm 2016 là 2016123456, Hàng tiếp theo (của năm 2017) sẽ giống như 2017000001
Tôi không cần id này làm khóa chính và tôi cũng lưu trữ ngày tạo. Ý tưởng là 'id hiển thị' này là duy nhất (vì vậy tôi có thể truy vấn theo nó) và nhóm người có thể theo năm.
Không chắc là bất kỳ hồ sơ sẽ bị xóa; tuy nhiên, tôi sẽ có xu hướng mã hóa phòng thủ chống lại một cái gì đó như thế.
Có cách nào để tôi có thể tạo id này mà không phải truy vấn id tối đa trong năm nay mỗi khi chèn một hàng mới không?
Ý tưởng:
- A
CreateNewInvoiceSP
, nhận đượcMAX
giá trị cho năm đó (yucky) - Một số tính năng được xây dựng trong tính năng để thực hiện chính xác điều này (tôi có thể mơ đúng)
- Có thể chỉ định một số UDF hoặc một cái gì đó trong
IDENTITY
hoặcDEFAULT
khai báo (??) - Một khung nhìn sử dụng
PARTITION OVER + ROW()
(bị xóa sẽ có vấn đề) - Một kích hoạt trên
INSERT
(vẫn sẽ cần chạy một sốMAX
truy vấn :() - Một công việc nền hàng năm, đã cập nhật một bảng với MAX cho mỗi năm được chèn vào mà sau đó tôi ... Cái gì đó?!
Tất cả đều là một chút không lý tưởng. Bất kỳ ý tưởng hoặc biến thể chào đón mặc dù!