मुझे व्यवसाय की आवश्यकता है कि इनवॉयस टेबल के प्रत्येक रिकॉर्ड में एक आईडी है जो YYYYNNNNNN जैसा दिखता है।
NNNNNN भाग को प्रत्येक वर्ष की शुरुआत में पुनः आरंभ करने की आवश्यकता है। तो 2016 में दर्ज पहली पंक्ति 2016000001 की तरह दिखेगी और दूसरी 2016000002 की तरह होगी। चलिए बताते हैं कि 2016 का आखिरी रिकॉर्ड 2016123456 था, अगली पंक्ति (2017 की) को 2017000001 की तरह दिखना चाहिए
मुझे प्राथमिक आईडी होने के लिए इस आईडी की आवश्यकता नहीं है और मैं निर्माण तिथि भी संग्रहीत करता हूं। विचार यह है कि यह 'डिस्प्ले आईडी' अद्वितीय है (इसलिए मैं इसके द्वारा क्वेरी कर सकता हूं) और मानव समूह-सक्षम, वर्ष तक।
यह संभावना नहीं है कि किसी भी रिकॉर्ड को हटा दिया जाएगा; हालाँकि, मुझे ऐसा कुछ करने के खिलाफ रक्षात्मक रूप से कोड करने की इच्छा होगी।
क्या कोई तरीका है कि मैं इस आईडी को अधिकतम आईडी के लिए इस बार हर बार एक नई पंक्ति डालने के बिना बना सकता हूं?
विचार:
- ए
CreateNewInvoiceSP, जोMAXउस वर्ष के लिए मूल्य प्राप्त करता है (yucky) - कुछ जादुई तरीके से ऐसा करने के लिए बनाया गया है (मैं सही सपना देख सकता हूं)
- यूडीएफ
IDENTITYयाDEFAULTघोषणा में कुछ निर्दिष्ट करने में सक्षम होने के नाते (??) - एक दृश्य जो उपयोग करता है
PARTITION OVER + ROW()(नष्ट हो जाएगा समस्याग्रस्त) - एक ट्रिगर पर
INSERT(अभी भी कुछMAXक्वेरी चलाने की आवश्यकता होगी :() - एक वार्षिक पृष्ठभूमि नौकरी, प्रत्येक वर्ष के लिए अधिकतम के साथ एक तालिका अपडेट की गई जो मैंने तब डाली ... कुछ ?!
जिनमें से सभी थोड़ा गैर आदर्श हैं। किसी भी विचार या भिन्नता का हालांकि स्वागत है!