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

دالة ترقيم تلقائي

مغلق
بدأه m_ageeb في 29 أبريل 2007 · 8 رد · 1,235 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع
CREATE FUNCTION GETNEXTID() RETURNS decimal(18,0)
BEGIN Declare @NEXTID decimal(18,0);
Set @NEXTID = 0
DECLARE max2 CURSOR  READ_ONLY for Select max(bill_no)+ 1 as max1   from bill_no FETCH NEXT FROM max2 into @NEXTID
Set @NEXTID = @NEXTID + 1
Insert Into bill (bill_no) Values (@NEXTID) 
RETURN @NEXTID
END

لقد قم بكتابة هذه الدالة على ان تقوم بإظهار اكبر قيمة في حقل الأرقام ثم يقوم بإضافة العدد واحد ليتم توليد الرقم الجديد ومن ثم نقوم بعمل اضافة سجل جديد بالرقم الجديد ، وارجاع القيمة

السؤال الاول : يوجد خطأ في الامر insert ، الرجاء حل هذه المشكلة .

السؤال الثاني : هل يوجد حل اقوى وافضل من هذه الدالة لحل عملية توليد الترقيم مع العمل بانني اعمل في شبكة بها اكثر من 8 اشخاص .

السؤال الثالث : هل يمكنني ان استبدل هذه الدالة واقوم بادخالها في trigger وتقوم بنفس الوظيفة

تعلم فليس المرء يولد عالما ولا اخو علم كمن هو جاهلو

------------------------------------------------------------

~¤ô_ô¤~ AGEEB SOFT~¤ô_ô¤~

ageeb2000@hotmail.com

#2

أكيد فيه ترقيم تلقائي و أفضل من الدالة يلي كتبتها

Identity ( 1 , 1 )

#3

السلام عليكم ورحمة الله وبركاته :

أخي الكريم كما قال لك أخونا Desigen ما في داعي لكل هالكود .. يعني لو أنشأت الجدول بطريقة صحيحة لما لجأت

لطريقة معقدة ليس لها معنى ..

باختصار يمكنك أن تجعل عموداً في جدول ما يملك خاصية الترقيم التلقائي Auto Numeric ..

هذا مثال بسيط :

Create Table MyTable( id int identity(1,1) , name Nvarchar(50) )

Insert MyTable(name) Values('Any One Here')
Insert MyTable(name) Values('My name')

Select * From MyTable

بالتوفيق ..

دروس و كتب مفيدة----------------------كتيب الإجرائيات المخزنةتعرف على اللغة 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

#4

السادة الاعضاء انا على علم ان هذه الطريقة هي الطريقة الامثل ولكني اقوم بعمل حذف فواتير واضافة فواتير وفي حالة حذف الفاتورة واضافة فاتورة جديدة يقوم العداد باضافة رقم جديد بمعنى

لو قمت باضافة فاتورة فسيكون رقم الفاتورة مثلاً 5 وبعد اضافة الفاتورة وجدت اي خطأ كان فقمت بحذف الفاتورة وعندما اقوم باضافة الفاتورة مرة اخرى فسيكون رقم الفاتورة 6 ، وانا اريد ان تكون رقم الفاتورة 5 بمعنى اكبر رقم فاتورة +1 هو رقم الفاتورة الجديد

تعلم فليس المرء يولد عالما ولا اخو علم كمن هو جاهلو

------------------------------------------------------------

~¤ô_ô¤~ AGEEB SOFT~¤ô_ô¤~

ageeb2000@hotmail.com

#5

أيضاً الحل سيكون بسيطاً بإذن الله ..

راقب معي المثال التالي :

-- إنشاء دالة لتعيد الترقيم التالي : Next Id

Create function Next_Bill_Id()
returns int
Begin
	Declare @result Int
	Select @result = isNull( max(id) , 0 ) + 1 From MyTable
	return @result 
/*	
	Select dbo.Next_Bill_Id()
*/
End

--------------
-- إنشاء الجدول المطلوب ..

Create Table MyTable( id int default dbo.Next_Bill_Id(), name Nvarchar(50) )

-- حشر بعض السجلات للتجربة ..

Insert MyTable(name) Values('Any One Here')
Insert MyTable(name) Values('My name')

-- استعراض السجلات 
Select * From MyTable

بالتوفيق ..

تم تعديل هذه المشاركة بواسطة imadouzoun في 30 أبريل 2007 في 10:54

دروس و كتب مفيدة----------------------كتيب الإجرائيات المخزنةتعرف على اللغة 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

#6

الف شكر على الإجابة

تعلم فليس المرء يولد عالما ولا اخو علم كمن هو جاهلو

------------------------------------------------------------

~¤ô_ô¤~ AGEEB SOFT~¤ô_ô¤~

ageeb2000@hotmail.com

#7

هل يمكنني ادخال الامر insert into داخل جسم الدالة

بمعنى



Create function Next_Bill_Id()
returns int
Begin
Declare @result Int
Select @result = isNull( max(id) , 0 ) + 1 From MyTable
insert into mytable (id) values (@resulte)
return @result

End

تعلم فليس المرء يولد عالما ولا اخو علم كمن هو جاهلو

------------------------------------------------------------

~¤ô_ô¤~ AGEEB SOFT~¤ô_ô¤~

ageeb2000@hotmail.com

#8

أهم جزء من الكود هو السطرين دول :

	Declare @result Int
	Select @result = isNull( max(id) , 0 ) + 1 From MyTable

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

يجب أن يتم حشرها في عمود الـ Id الخاص بجدولك ..

بالتوفيق ..

دروس و كتب مفيدة----------------------كتيب الإجرائيات المخزنةتعرف على اللغة 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

#9

يااخي العزيز قمت بعمل الدالة ولكن اريد ادخال هذا الامر داخل الدالة لكنه لا يقبل

insert into mytable (id) values (@resulte)

تم تعديل هذه المشاركة بواسطة m_ageeb في 2 مايو 2007 في 10:25

تعلم فليس المرء يولد عالما ولا اخو علم كمن هو جاهلو

------------------------------------------------------------

~¤ô_ô¤~ AGEEB SOFT~¤ô_ô¤~

ageeb2000@hotmail.com

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

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