الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

Unique

مغلق
بدأه mina في 6 أبريل 2003 · 6 رد · 1,696 مشاهدة · في أرشيف قسم SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

كيف يمكن جعل أحد الحقول Unique خلال العام ، أي عند كل بداية عام جديد يبدأ العد من الـ1 مجدداً :D

شكراً سلفاً

#2

لم أفهم أبدا السؤال .. فما دخل ال unique بالعد .. إذا كنت تريد أن يكون الحقل unique فكيف تريد أن يرجع العد إلى 1 وقد يكون بالأساس هناك القيمة 1 في نفس الحقل ..

أرجو التوضيح أكثر ويفضل ذكر مثال بسيط :)

Coding on the Cloud and for the Cloud!

My Blog

#3

الواضح أن السؤال يتعلق ببرنامج يكون الترقيم فيه آلي (كرقم فاتورة مثلا) و المطلوب هو إعادة الترقيم مرة أخرى مع بداية كل سنة جديدة ..

طبعاً كلامك صحيح يا هاني فهو لن يصبح Unique إلا بشرط أن يتم ربطه بالسنة .. ففاتورة رقم 1 سنة 1423 تختلف عن فاتورة رقم 1 سنة 1424 ..

فالمفتاح الأساسي يجب أن لا يقل عن هذين الحقلين ..

#4

كمل قال الأخ shr133 أريد أن يبدأ العد من الواحد عند بداية كل عام ، حيث الترقيم سيكون تلقائياً ، فكيف أفعل ذلك ؟؟

#5

أعتقد أني فهمت الآن المطلوب ..

مثلا ليكن لدينا جدول اسمه 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!

My Blog

#6

نسيت أن أذكر .. أنه الآن عند استخدام عبارة INSERT لوضع حقل جديد يتم زيادة العد تلقائيا وتجاهل خانة id ..

Coding on the Cloud and for the Cloud!

My Blog

#7

شكراً لك كثيراً (f)(f)فهذا هو فعلاً ما أحتاجه ، شكراً

هذا الموضوع مغلق.

مواضيع مشابهة