السلام عليكم اريد معرفة كيفية اعادة ترتيب عمود ال id للسجلات بشكل متسلسل بعد حذف احدى السجلات بحيث يبقى تسلسل ارقام السجلات في الجدول علما باني استخدمت AUTO-INCREMENT على عمود id وايضا هو primary key
اعادة تسلسل رقم السجلات في الجدول
هل من حل ايها الاخوة
لا يمكن إعادة تسلسل حقل auto increment الا بإلغائه وتكوينه من جديد فقط
لا انصح بهذا لا ياثر عدم السلسل في سير البرنامج وهذا للمستقبل وحماية البيانات واما المسلسل فيكون في التقرير
سبحانه الله وبحمده سبحانه الله العظيم
if (You Love ArabTeam2000 ) MessageBox.Show("All ArabTeam2000 Love You"); else MessageBox.Show("go to your mama"); Make it run, make it right, make it fast, make it small
normalize your data and don't make it look like excel sheet
الأبداع في الرأس والعلم في الكراس
روابط مفيدة
[دروس] تجاهل الwhere
طريقة الاضافة للجدولين مرتبطين مرة واحدة
قراءة صوره من مسار
حل مشكلة الارقام العربي في الكريستال ريبورت
حل مشكلة تصدير OLE Object الي Physical File مرة أخري
كود عمل نسخة يومية من قاعدة البيانات بتاريخ مع حذف النسخة السابقة من 30 يوم مضي
معظم دوال التعامل مع string
Change Data Capture
SQL Course
string-format-datetime
LINQ to SQL in C#
Sum-of-previous-row-values-in-SqlServer
alarm-for-stop-agent-service
SQL Server CTE
السلام عليكم و رحمة الله و بركاته
أخي الكريم يمكن ذلك و بكل بساطة و لكن عليك أن تزيل خاصية الـ Identity من العمود المذكور أولا.. و إليك مثال كتبته من أجلك :
-- لننشئ الجدول التالي من أجل المثال Create Table Student(Id int primary key, Name Varchar(50)) Go -- ندخل بعض البيانات Insert Student(Id, Name) Values(1, 'Ahmad') Insert Student(Id, Name) Values(2, 'Samer') Insert Student(Id, Name) Values(3, 'Saleem') Insert Student(Id, Name) Values(4, 'Hany') Insert Student(Id, Name) Values(5, 'Hala') Go -- دعنا ننشئ إجرائية مخزنة مسؤولة عن حذف سجل من الجدول السابق Create Proc Student_Delete @Id int As Delete Student Where Id = @Id ----- تصحيح الترقيم يبدأ هنا Declare @curId int Declare @C Cursor Set @C = Cursor dynamic for Select Id From Student Where Id > @Id Order By Id Open @C Fetch Next From @C into @curId While (@@fetch_status = 0) begin update Student Set Id = @curId - 1 Where current of @C Fetch Next From @C into @curId end Go -- لنختبر exec Student_Delete @Id = 2 -- لنشاهد الآن محتويات الجدول Select * From Student
تم تعديل هذه المشاركة بواسطة imadouzoun في 2 ديسمبر 2013 في 17:10
دروس و كتب مفيدة----------------------كتيب الإجرائيات المخزنةتعرف على اللغة Transact SQL <<-->> كتيب عن تنصيب قواعد البيانات Sql Server باللغة العربية كتيب عن إنشاء قواعد البيانات في SQL Server باللغة العربية <<-->> درس مع الأمثلة عن المؤشرات و التعامل معها في الـ T-SQLالعبارات الشرطية و الحلقات في T-SQL <<-->> شرح لبعض الـ Extended Stored Procedure استخدام مكتبات الـ Dot Net الخاصة بك في الـ Sql Server 2005 <<-->> التعامل مع المصفوفات من خلال الـ T-SQLتعابير الجداول الشائعة في SQL Server 2005 <<-->>الاتصال بالأداة SQL Server Management Studioحلول سريعة و لمحات برمجية --------------------------------التصدير إلى إكسل : طريقة أولى : طريقة بسطر واحد من الكود <<-->> طريقة ثانية : طريقة تحتاج إنشاء إجرائية مخزنةً تجهيز بيانات جدول بالصيغة XML تمهيداً لحفظها كملف <<-->> تصدير البيانات إلى ملفات نصية برمجياً إغلاق جميع الإتصالات المفتوحة بقاعدة بيانات محددة .. تمهيداً لاسترجاعها أو حذفها <<-->> الاستعلام بناء على وقت مخزن بالصيغة العربية ضمن حقل نصي ..حذف السجلات المتكررة و إبقاء عدد محدد منها في جدول.. <<-->> أسرع طريقة لحذف سجلات جدول كيف احصل على اسم جهازي والباسوورد باستخدام T-SQL <<-->> حشر أنواع الصور المختلفة في حقل من نوع Image باستخدام إجرائية مخزنة .كيف تعرف أنواع الصور المخزنة في حقل من نوع Image .. <<-->> إجرائيات مخزنة ببارامترات ديناميكية مفيدة جداً للاستعلامات استخدام رقم الحقل بدلاً من الإسم في عبارات الإستعلام <<-->> من هو أضخم الجداول في قاعدة بياناتي ؟معرفة زمن تنفيذ الإجرائيات ( لتختار الطريقة الأسرع بين إجرائياتك المخزنة ) <<-->> التعامل مع الـ Rules برمجياً الحصول على آخر صف في الجدول <<-->> قراءة ملفات XML باستخدام T-SQL برمجياً (مثال مرفق)سحب بيانات ملف إكسل إلى الـ SQL Server <<-->> تشفير النسخة الاحتياطية بكلمة مرور <<-->> التخلص من البيانات المكررة <<-->> حل مشكلة التاريخ الهجريDifferential Backup بالتعريف---------- لا إله إلا الله .. محمد رسول الله
أخوكم في الله.. Imad Ozone
@KARIMSOFt
+1
@dmw
انا لا انصح بذلك ايضا. اذا لم تعرف ان تتحكم بالكود فانك ستواجه مخاطر جمة ويمكن ان يؤدي ذلك الى فقدان الترابط بين الجداول (parent & child)
هناك طريقة انا اتبعها لعمل ذلك ولكنها ليست من ضمن logic تبع البرنامج بل هي utility خاصة استعملها للتصحيح واعادة الربط بين الجداول في حال وجود orphan rows
1- الحصول على قيمة ال identity
dbcc checkident('table_name')2- اسنخراج القيم من النتيجة محتاج لكود اذا اردت ان ارسله لاحقا اذا كنت مصمم
3- تغيير قيمة identity
DBCC checkident('table_name',RESEED,new_value)السلام عليكم و رحمة الله
يوجد أيضاً طريقة أخرى بسيطة و هي أن تجلب السجل ذو قيمة الـ ID الأعلى و تضعه مكان السجل المحذوف (أي تعطيه ID السجل الذي تريد حذفه) و تكون بذلك أزلت الفراغ الناجم عن حذف سجل.
تحياتي
تم تعديل هذه المشاركة بواسطة imadouzoun في 4 ديسمبر 2013 في 14:49
دروس و كتب مفيدة----------------------كتيب الإجرائيات المخزنةتعرف على اللغة Transact SQL <<-->> كتيب عن تنصيب قواعد البيانات Sql Server باللغة العربية كتيب عن إنشاء قواعد البيانات في SQL Server باللغة العربية <<-->> درس مع الأمثلة عن المؤشرات و التعامل معها في الـ T-SQLالعبارات الشرطية و الحلقات في T-SQL <<-->> شرح لبعض الـ Extended Stored Procedure استخدام مكتبات الـ Dot Net الخاصة بك في الـ Sql Server 2005 <<-->> التعامل مع المصفوفات من خلال الـ T-SQLتعابير الجداول الشائعة في SQL Server 2005 <<-->>الاتصال بالأداة SQL Server Management Studioحلول سريعة و لمحات برمجية --------------------------------التصدير إلى إكسل : طريقة أولى : طريقة بسطر واحد من الكود <<-->> طريقة ثانية : طريقة تحتاج إنشاء إجرائية مخزنةً تجهيز بيانات جدول بالصيغة XML تمهيداً لحفظها كملف <<-->> تصدير البيانات إلى ملفات نصية برمجياً إغلاق جميع الإتصالات المفتوحة بقاعدة بيانات محددة .. تمهيداً لاسترجاعها أو حذفها <<-->> الاستعلام بناء على وقت مخزن بالصيغة العربية ضمن حقل نصي ..حذف السجلات المتكررة و إبقاء عدد محدد منها في جدول.. <<-->> أسرع طريقة لحذف سجلات جدول كيف احصل على اسم جهازي والباسوورد باستخدام T-SQL <<-->> حشر أنواع الصور المختلفة في حقل من نوع Image باستخدام إجرائية مخزنة .كيف تعرف أنواع الصور المخزنة في حقل من نوع Image .. <<-->> إجرائيات مخزنة ببارامترات ديناميكية مفيدة جداً للاستعلامات استخدام رقم الحقل بدلاً من الإسم في عبارات الإستعلام <<-->> من هو أضخم الجداول في قاعدة بياناتي ؟معرفة زمن تنفيذ الإجرائيات ( لتختار الطريقة الأسرع بين إجرائياتك المخزنة ) <<-->> التعامل مع الـ Rules برمجياً الحصول على آخر صف في الجدول <<-->> قراءة ملفات XML باستخدام T-SQL برمجياً (مثال مرفق)سحب بيانات ملف إكسل إلى الـ SQL Server <<-->> تشفير النسخة الاحتياطية بكلمة مرور <<-->> التخلص من البيانات المكررة <<-->> حل مشكلة التاريخ الهجريDifferential Backup بالتعريف---------- لا إله إلا الله .. محمد رسول الله
أخوكم في الله.. Imad Ozone
بارك الله فيكم جميعاً
سؤال حول نفس الموضوع
وماذا عن اذا كان عندي حقل ID نوع بياناته Int ولكن ليس Identity واستخدمة لتوليد سيريال خاص بي عن طريق هذه الجمله
Select isnull(Max (HAdd_doc),0) + 1
ثم قمت بحذف سجل في منتصف السجلات ثم أردت ان اقوم عند جلب السيريال الذي عليه الدور ان يراعي السجلات المحذوفه ويقترحها عليا أولاً اذا كان هناك سجلات محذوفه أما اذا كان هناك سجلات غير محذوفه يأخذ السجل الذي يليه من الجدول الاول
هل أقوم بانشاء جدول أضع فيه التسلسلات المحذوفه مثلا وعند استدعاء الرقم المسلسل أجعل البرنامج بطريقة ما يبحث أولاً في جدول الارقام المحذوفه وان لم يجد يذهب الي الجدول الاخر أم هناك طريقة أخري أفضل مما ذكرت ؟؟
تم تعديل هذه المشاركة بواسطة محمد فؤاد تركي في 6 ديسمبر 2013 في 22:12


السلام عليكم و رحمة الله ..
بالتأكيد يمكنك أن تنجز ذلك و إليك مثال حضرته لهذا الغرض:
use tempdb go Create Table Students(Id int primary key, Name Varchar(50)) -- Insert Students(Id, Name) Select 1, 'Samer' Insert Students(Id, Name) Select 2, 'Ahmad' Insert Students(Id, Name) Select 3, 'Salem' Insert Students(Id, Name) Select 4, 'Ameer' Insert Students(Id, Name) Select 5, 'Salem' go Create function GetProperID() returns int as begin declare @Id int, @i int = 1 declare @C cursor Set @c = cursor for Select Id from Students order by Id open @c fetch next from @c into @Id while ( @@fetch_status = 0 ) begin if(@Id <> @i) begin return @i end set @i = @i + 1 fetch next from @c into @Id end return @i end go
الاختبار
-- Situation 1 select dbo.GetProperID() -- Situation 2 Delete Students Where Id = 3 select dbo.GetProperID() -- -- Situation 3 Delete Students select dbo.GetProperID()
تحياتي
دروس و كتب مفيدة----------------------كتيب الإجرائيات المخزنةتعرف على اللغة Transact SQL <<-->> كتيب عن تنصيب قواعد البيانات Sql Server باللغة العربية كتيب عن إنشاء قواعد البيانات في SQL Server باللغة العربية <<-->> درس مع الأمثلة عن المؤشرات و التعامل معها في الـ T-SQLالعبارات الشرطية و الحلقات في T-SQL <<-->> شرح لبعض الـ Extended Stored Procedure استخدام مكتبات الـ Dot Net الخاصة بك في الـ Sql Server 2005 <<-->> التعامل مع المصفوفات من خلال الـ T-SQLتعابير الجداول الشائعة في SQL Server 2005 <<-->>الاتصال بالأداة SQL Server Management Studioحلول سريعة و لمحات برمجية --------------------------------التصدير إلى إكسل : طريقة أولى : طريقة بسطر واحد من الكود <<-->> طريقة ثانية : طريقة تحتاج إنشاء إجرائية مخزنةً تجهيز بيانات جدول بالصيغة XML تمهيداً لحفظها كملف <<-->> تصدير البيانات إلى ملفات نصية برمجياً إغلاق جميع الإتصالات المفتوحة بقاعدة بيانات محددة .. تمهيداً لاسترجاعها أو حذفها <<-->> الاستعلام بناء على وقت مخزن بالصيغة العربية ضمن حقل نصي ..حذف السجلات المتكررة و إبقاء عدد محدد منها في جدول.. <<-->> أسرع طريقة لحذف سجلات جدول كيف احصل على اسم جهازي والباسوورد باستخدام T-SQL <<-->> حشر أنواع الصور المختلفة في حقل من نوع Image باستخدام إجرائية مخزنة .كيف تعرف أنواع الصور المخزنة في حقل من نوع Image .. <<-->> إجرائيات مخزنة ببارامترات ديناميكية مفيدة جداً للاستعلامات استخدام رقم الحقل بدلاً من الإسم في عبارات الإستعلام <<-->> من هو أضخم الجداول في قاعدة بياناتي ؟معرفة زمن تنفيذ الإجرائيات ( لتختار الطريقة الأسرع بين إجرائياتك المخزنة ) <<-->> التعامل مع الـ Rules برمجياً الحصول على آخر صف في الجدول <<-->> قراءة ملفات XML باستخدام T-SQL برمجياً (مثال مرفق)سحب بيانات ملف إكسل إلى الـ SQL Server <<-->> تشفير النسخة الاحتياطية بكلمة مرور <<-->> التخلص من البيانات المكررة <<-->> حل مشكلة التاريخ الهجريDifferential Backup بالتعريف---------- لا إله إلا الله .. محمد رسول الله
أخوكم في الله.. Imad Ozone
جرب هذا الكود اعتقد اسرع
declare @T table ([nCode] [int] IDENTITY(1,1) NOT NULL,[pnCitizenCode] [int]) INSERT INTO @T SELECT pnCitizenCode FROM pCitizen ORDER BY pnCitizenCode select top(1) [nCode] from @T WHERE [nCode] <>[pnCitizenCode] ORDER BY nCode
سبحانه الله وبحمده سبحانه الله العظيم
if (You Love ArabTeam2000 ) MessageBox.Show("All ArabTeam2000 Love You"); else MessageBox.Show("go to your mama"); Make it run, make it right, make it fast, make it small
normalize your data and don't make it look like excel sheet
الأبداع في الرأس والعلم في الكراس
روابط مفيدة
[دروس] تجاهل الwhere
طريقة الاضافة للجدولين مرتبطين مرة واحدة
قراءة صوره من مسار
حل مشكلة الارقام العربي في الكريستال ريبورت
حل مشكلة تصدير OLE Object الي Physical File مرة أخري
كود عمل نسخة يومية من قاعدة البيانات بتاريخ مع حذف النسخة السابقة من 30 يوم مضي
معظم دوال التعامل مع string
Change Data Capture
SQL Course
string-format-datetime
LINQ to SQL in C#
Sum-of-previous-row-values-in-SqlServer
alarm-for-stop-agent-service
SQL Server CTE
السلام عليكم و رحمة الله
يا صديقي ليست أسرع بالتأكيد حسب الـ Execution Plan Study : عبارات الـ DML على Memory Tables لا تكون أسرع من Cursor على عبارة SQL.
هذا إذا لم أقل لك أيضا أنني تجنبت استخدام خيارات المؤشر المتقدمة كالخيار fast_forward لجعله سريعاً جداً.
Create function GetProperID() returns int as begin declare @Id int, @i int = 1 declare @C cursor Set @c = cursor fast_forward for Select Id from Students order by Id open @c fetch next from @c into @Id while ( @@fetch_status = 0 ) begin if(@Id <> @i) begin return @i end set @i = @i + 1 fetch next from @c into @Id end return @i end
تحياتي
تم تعديل هذه المشاركة بواسطة imadouzoun في 8 ديسمبر 2013 في 23:35
دروس و كتب مفيدة----------------------كتيب الإجرائيات المخزنةتعرف على اللغة Transact SQL <<-->> كتيب عن تنصيب قواعد البيانات Sql Server باللغة العربية كتيب عن إنشاء قواعد البيانات في SQL Server باللغة العربية <<-->> درس مع الأمثلة عن المؤشرات و التعامل معها في الـ T-SQLالعبارات الشرطية و الحلقات في T-SQL <<-->> شرح لبعض الـ Extended Stored Procedure استخدام مكتبات الـ Dot Net الخاصة بك في الـ Sql Server 2005 <<-->> التعامل مع المصفوفات من خلال الـ T-SQLتعابير الجداول الشائعة في SQL Server 2005 <<-->>الاتصال بالأداة SQL Server Management Studioحلول سريعة و لمحات برمجية --------------------------------التصدير إلى إكسل : طريقة أولى : طريقة بسطر واحد من الكود <<-->> طريقة ثانية : طريقة تحتاج إنشاء إجرائية مخزنةً تجهيز بيانات جدول بالصيغة XML تمهيداً لحفظها كملف <<-->> تصدير البيانات إلى ملفات نصية برمجياً إغلاق جميع الإتصالات المفتوحة بقاعدة بيانات محددة .. تمهيداً لاسترجاعها أو حذفها <<-->> الاستعلام بناء على وقت مخزن بالصيغة العربية ضمن حقل نصي ..حذف السجلات المتكررة و إبقاء عدد محدد منها في جدول.. <<-->> أسرع طريقة لحذف سجلات جدول كيف احصل على اسم جهازي والباسوورد باستخدام T-SQL <<-->> حشر أنواع الصور المختلفة في حقل من نوع Image باستخدام إجرائية مخزنة .كيف تعرف أنواع الصور المخزنة في حقل من نوع Image .. <<-->> إجرائيات مخزنة ببارامترات ديناميكية مفيدة جداً للاستعلامات استخدام رقم الحقل بدلاً من الإسم في عبارات الإستعلام <<-->> من هو أضخم الجداول في قاعدة بياناتي ؟معرفة زمن تنفيذ الإجرائيات ( لتختار الطريقة الأسرع بين إجرائياتك المخزنة ) <<-->> التعامل مع الـ Rules برمجياً الحصول على آخر صف في الجدول <<-->> قراءة ملفات XML باستخدام T-SQL برمجياً (مثال مرفق)سحب بيانات ملف إكسل إلى الـ SQL Server <<-->> تشفير النسخة الاحتياطية بكلمة مرور <<-->> التخلص من البيانات المكررة <<-->> حل مشكلة التاريخ الهجريDifferential Backup بالتعريف---------- لا إله إلا الله .. محمد رسول الله
أخوكم في الله.. Imad Ozone
لا اسطيع ان اتكلم بعد قول الخبير imadouzoun فهو اقدر مني وانا احترم رايه ولكن اخبرني بتفصيل عن fast_forward
سبحانه الله وبحمده سبحانه الله العظيم
if (You Love ArabTeam2000 ) MessageBox.Show("All ArabTeam2000 Love You"); else MessageBox.Show("go to your mama"); Make it run, make it right, make it fast, make it small
normalize your data and don't make it look like excel sheet
الأبداع في الرأس والعلم في الكراس
روابط مفيدة
[دروس] تجاهل الwhere
طريقة الاضافة للجدولين مرتبطين مرة واحدة
قراءة صوره من مسار
حل مشكلة الارقام العربي في الكريستال ريبورت
حل مشكلة تصدير OLE Object الي Physical File مرة أخري
كود عمل نسخة يومية من قاعدة البيانات بتاريخ مع حذف النسخة السابقة من 30 يوم مضي
معظم دوال التعامل مع string
Change Data Capture
SQL Course
string-format-datetime
LINQ to SQL in C#
Sum-of-previous-row-values-in-SqlServer
alarm-for-stop-agent-service
SQL Server CTE
السلام عليكم و رحمة الله
بارك الله فيك أخي كريم ..
بالنسبة للمؤشر Fast_Forward فهو يعمل مع بيانات الجدول بشكل مباشر و لا ينشئ نسخة من بيانات الجدول في الـtempdb كما تفعل أنواع أخرى, عدا عن كون هذا الخيار يحد من عمليات الـ Update, Delete على السجل الحالي للمؤشر أثناء المرور عليه بحلقة. فيكون هذا المؤشر بالتالي مزيج لخاصيتين Forward_only, Read_only و طبعاً مع Optimization لتسريع الـ Loop على السجلات.
Forward_only: هناك أنواع أخرى من المؤشرات تسمح لك بإنجاز أنواع مختلفة من جلب السجلات (غير Fetch Next) و ذلك لأغراض مختلفة على خلاف هذا النوع الذي لا يسمح إلا بالسير للأمام.
بالمناسبة كتبت مقالة عن هذا المؤشرات بشيء من التفصيل و ذكرت هذا النوع فيها:
/index.php/topic/108624-المؤشرات-في-ال-sql-server/#entry551207
لاحظ أن ردي السابق يحوي Fast_Forward Cursor في الدالة التي كتبتها.. سهل الاستخدام جداً.
مع فائق احترامي.
تم تعديل هذه المشاركة بواسطة imadouzoun في 9 ديسمبر 2013 في 07:57
دروس و كتب مفيدة----------------------كتيب الإجرائيات المخزنةتعرف على اللغة Transact SQL <<-->> كتيب عن تنصيب قواعد البيانات Sql Server باللغة العربية كتيب عن إنشاء قواعد البيانات في SQL Server باللغة العربية <<-->> درس مع الأمثلة عن المؤشرات و التعامل معها في الـ T-SQLالعبارات الشرطية و الحلقات في T-SQL <<-->> شرح لبعض الـ Extended Stored Procedure استخدام مكتبات الـ Dot Net الخاصة بك في الـ Sql Server 2005 <<-->> التعامل مع المصفوفات من خلال الـ T-SQLتعابير الجداول الشائعة في SQL Server 2005 <<-->>الاتصال بالأداة SQL Server Management Studioحلول سريعة و لمحات برمجية --------------------------------التصدير إلى إكسل : طريقة أولى : طريقة بسطر واحد من الكود <<-->> طريقة ثانية : طريقة تحتاج إنشاء إجرائية مخزنةً تجهيز بيانات جدول بالصيغة XML تمهيداً لحفظها كملف <<-->> تصدير البيانات إلى ملفات نصية برمجياً إغلاق جميع الإتصالات المفتوحة بقاعدة بيانات محددة .. تمهيداً لاسترجاعها أو حذفها <<-->> الاستعلام بناء على وقت مخزن بالصيغة العربية ضمن حقل نصي ..حذف السجلات المتكررة و إبقاء عدد محدد منها في جدول.. <<-->> أسرع طريقة لحذف سجلات جدول كيف احصل على اسم جهازي والباسوورد باستخدام T-SQL <<-->> حشر أنواع الصور المختلفة في حقل من نوع Image باستخدام إجرائية مخزنة .كيف تعرف أنواع الصور المخزنة في حقل من نوع Image .. <<-->> إجرائيات مخزنة ببارامترات ديناميكية مفيدة جداً للاستعلامات استخدام رقم الحقل بدلاً من الإسم في عبارات الإستعلام <<-->> من هو أضخم الجداول في قاعدة بياناتي ؟معرفة زمن تنفيذ الإجرائيات ( لتختار الطريقة الأسرع بين إجرائياتك المخزنة ) <<-->> التعامل مع الـ Rules برمجياً الحصول على آخر صف في الجدول <<-->> قراءة ملفات XML باستخدام T-SQL برمجياً (مثال مرفق)سحب بيانات ملف إكسل إلى الـ SQL Server <<-->> تشفير النسخة الاحتياطية بكلمة مرور <<-->> التخلص من البيانات المكررة <<-->> حل مشكلة التاريخ الهجريDifferential Backup بالتعريف---------- لا إله إلا الله .. محمد رسول الله
أخوكم في الله.. Imad Ozone