كيف يمكن جعل أحد الحقول Unique خلال العام ، أي عند كل بداية عام جديد يبدأ العد من الـ1 مجدداً :D
شكراً سلفاً
كيف يمكن جعل أحد الحقول Unique خلال العام ، أي عند كل بداية عام جديد يبدأ العد من الـ1 مجدداً :D
شكراً سلفاً
الواضح أن السؤال يتعلق ببرنامج يكون الترقيم فيه آلي (كرقم فاتورة مثلا) و المطلوب هو إعادة الترقيم مرة أخرى مع بداية كل سنة جديدة ..
طبعاً كلامك صحيح يا هاني فهو لن يصبح Unique إلا بشرط أن يتم ربطه بالسنة .. ففاتورة رقم 1 سنة 1423 تختلف عن فاتورة رقم 1 سنة 1424 ..
فالمفتاح الأساسي يجب أن لا يقل عن هذين الحقلين ..
كمل قال الأخ shr133 أريد أن يبدأ العد من الواحد عند بداية كل عام ، حيث الترقيم سيكون تلقائياً ، فكيف أفعل ذلك ؟؟
أعتقد أني فهمت الآن المطلوب ..
مثلا ليكن لدينا جدول اسمه atest يحتوي على الحقول التالية:
date
id
info
الkey مفعل على الحقلين الأولين ويفضل وضع التاريخ بالأول لأنه على ما أعتقد فإن ال queries سوف التاريخ قبل الحقل للوصول إلى نتيجة ما ..
الآن نحتاج إلى أن يزداد الحقل id بشكل تلقائي .. مثلا يبدأ بالقيمة 1 ثم 2 وهكذا حتى تبدأ السنى الجديدة فيعاد العد من 1 ومن ثم 2 وهكذا ..
لا يمكن استخدام IDENTITY في هذه الحالة لأنها ليست ذكية كفاية من أجل أن ترجع العد من 1 عندما تبدأ السنة الجديدة ..
يفضل استخدام ال Triggers في هذه الحالة .. ويمكن استخدام ال Trigger التالي:
CREATE TRIGGER tg_insert_atest ON atest INSTEAD OF INSERT AS BEGIN DECLARE @count int DECLARE @lastdate datetime DECLARE @currdate datetime SELECT TOP 1 @count = [id]+1, @lastdate = [date] FROM atest ORDER BY [date] desc, [id] desc IF (@count IS NOT NULL) AND (@lastdate IS NOT NULL) BEGIN SELECT @currdate = [date] FROM Inserted IF DATEPART(yyyy, @currdate) > DATEPART(yyyy, @lastdate) SET @count = 1 END ELSE SELECT @count = [id] FROM Inserted INSERT INTO atest ([date], [id], info) SELECT [date], @count, info FROM Inserted END
Coding on the Cloud and for the Cloud!
شكراً لك كثيراً (f)(f)فهذا هو فعلاً ما أحتاجه ، شكراً
هذا الموضوع مغلق.