ฉันมีข้อกำหนดทางธุรกิจที่แต่ละระเบียนในตารางใบแจ้งหนี้มีรหัสซึ่งดูเหมือน YYYYNNNNNNN
ส่วน NNNNNN จำเป็นต้องเริ่มต้นใหม่ทุกต้นปี ดังนั้นแถวแรกที่ป้อนในปี 2559 จะมีลักษณะเป็น 2016000001 และแถวที่สองเช่น 2016000002 ฯลฯ ให้บอกว่าระเบียนสุดท้ายของปี 2559 คือ 2016123456 แถวถัดไป (ของปี 2017) ควรมีลักษณะเหมือน 2017000001
ฉันไม่ต้องการรหัสนี้เป็นคีย์หลักและฉันเก็บวันที่สร้างเช่นกัน แนวคิดคือ 'รหัสแสดง' นี้ไม่ซ้ำกัน (ดังนั้นฉันจึงสามารถค้นหาได้) และกลุ่มคนสามารถปี
ไม่น่าเป็นไปได้ที่จะมีการลบบันทึกใด ๆ อย่างไรก็ตามฉันจะโน้มน้าวให้รหัสป้องกันสิ่งเช่นนั้น
มีวิธีใดบ้างที่ฉันสามารถสร้าง id นี้โดยไม่ต้องค้นหา max id ในปีนี้ทุกครั้งที่มีการแทรกแถวใหม่
ไอเดีย:
- A
CreateNewInvoiceSP
ซึ่งได้รับความMAX
คุ้มค่าสำหรับปีนั้น (yucky) - คุณลักษณะบางอย่างในตัวที่มีมนต์ขลังสำหรับการทำสิ่งนี้ (ฉันฝันได้ถูกต้อง)
- ความสามารถในการระบุ UDF หรือบางอย่างใน
IDENTITY
หรือDEFAULT
การประกาศ (??) - มุมมองที่ใช้
PARTITION OVER + ROW()
(ถูกลบจะมีปัญหา) - ทริกเกอร์เปิด
INSERT
(ยังคงต้องเรียกใช้MAX
แบบสอบถาม :() - งานพื้นหลังประจำปีอัปเดตตารางด้วย MAX สำหรับแต่ละปีซึ่งฉันใส่เข้าไปแล้ว ... อะไรซักอย่าง!
ทั้งหมดนี้ค่อนข้างไม่เหมาะนัก ยินดีต้อนรับความคิดหรือรูปแบบใด ๆ !