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

أريد الأرقام المفقوده

بدأه AboMoayad في 14 مايو 2008 · 7 رد · 1,007 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

أريد سكربت يتعرف على Gap ما بين الحقول بمعنى يتعرف على الأرقام المفقوده

لأنه عناك حقل رقم تسلسلي لكن هناك أرقام مفقوده فيها , فانا أريد هذه الأرقام المفقوده

اللهم أطل عمري وأحسن عملي واختم بالشهادة أجلي

#2

السلام عليكم

توجد طرق كثيرة واليك الطريقة والتي وجدتها الاسرع واستخدمها لاضافة رقم تسلسلي جديد

 SELECT  no + 1
	FROM table1  AS g1
	WHERE NOT EXISTS (SELECT no FROM table1 AS g2
					  WHERE (g2.no = g1.no + 1))

وبدل فقط اسم الجدول والحقل التسلسلي

للتنبيه :هذه الطرقة تجد الارقام الفارغة بين ارقام موجودة فمثلا لو كان اصغر رقم تسلسلي في الجدول هو 100 سيتم احضار الارقام التي اكبر من 100 ولن تبدأ من 1

#3

رائع ما شاء الله عليك وبارك في علمك

لكن أخي الفاضل .. اذا كان هناك فارق أكثر من رقم لا يأتي به

يعني اذا كان رقم 4 ثم يليه 7 يأتي بالرقم 5 فقط دون الرقم 6

تم تعديل هذه المشاركة بواسطة مبرمج القاعده في 14 مايو 2008 في 22:59

اللهم أطل عمري وأحسن عملي واختم بالشهادة أجلي

#4

السلام عليكم

الطريقة السابقة استخدمها لمعرفة اول رقم فارغ عند طلب رقم متسلسل جديد وذلك باضافة Select min(no+1) الى الاستعلام السابق ولعرض جميع الفراغات بحاجة الى قليل من التعديل والى استخدام جداول مؤقتة لكن سارفق لك طريقة اخرى حيث تعرض لك الارقام الغير موجودة على الشكل (من الى ) وهي كما يلي

CREATE TABLE gaps(ID int NOT NULL PRIMARY KEY)
INSERT INTO gaps values(1)
INSERT INTO gaps values(2)
INSERT INTO gaps values(3)
INSERT INTO gaps values(4)
INSERT INTO gaps values(6)
INSERT INTO gaps values(7)
INSERT INTO gaps values(8)
INSERT INTO gaps values(10)
INSERT INTO gaps values(14)
INSERT INTO gaps values(15)
INSERT INTO gaps values(16)
INSERT INTO gaps values(17)
INSERT INTO gaps values(38)



Select 'البداية' = LastSeqNumber + 1
	, 'النهاية' = NextSeqNumber - 1
	, 'العدد' = NextSeqNumber - (LastSeqNumber + 1) 
 from ( Select LastSeqNumber = (Select isnull(Max(Seq2.ID),0) as SeqNumber 
   from Gaps Seq2
   where (Seq2.ID)   <  ( Seq1.ID )         ) 
  , NextSeqNumber = ID
    from Gaps Seq1
  ) as A
 where NextSeqNumber - LastSeqNumber > 1
 order by LastSeqNumber

تم تعديل هذه المشاركة بواسطة TareqVB في 15 مايو 2008 في 08:50

#5

شكرا

تم تعديل هذه المشاركة بواسطة مبرمج القاعده في 15 مايو 2008 في 14:56

اللهم أطل عمري وأحسن عملي واختم بالشهادة أجلي

#6

السلام عليك أخي الكريم

جزاك الله كل خير

ممكن كود يعطيك أصغر رقم غير موجود يعني لو وجد 7 وغير موجود ما قبلها يعطيك 1

ولو تتفضل إذا كان ممكن كود يجعل الجداول ترتب نفسها تلقائيا لأن أصلا الأرقام عندي تزداد أوتوماتيكيا : يعني لو انحذف 7 يصبح الي بعده هو الرقم 7 وهكذا

شكرا جزيلا وجزاك الله كل خير في الدنيا والاخرة

#7

السلام عليكم

اقتباس
ممكن كود يعطيك أصغر رقم غير موجود يعني لو وجد 7 وغير موجود ما قبلها يعطيك 1

في المشاركة الثانية الاجراء يقوم بهذا الامر بشكل ممتاز يبقيى عليك ان تفحص هل موجود الواحد ام لا مثل

select * from mytable where id =1

وافحص بطريقتك اذا رجع قيم ام لا بعد ذلك يرجع أي ارقام فارغة بشكل صحيح

اقتباس
ولو تتفضل إذا كان ممكن كود يجعل الجداول ترتب نفسها تلقائيا لأن أصلا الأرقام عندي تزداد أوتوماتيكيا : يعني لو انحذف 7 يصبح الي بعده هو الرقم 7 وهكذا

update  myTable set id =id-1 where  id  >7
#8

جزاك الله كل خير

الاكواد شغالة

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