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

استفسار بعمل ترقيم تلقائي للجدول خلال سنة معينه

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

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

كثير مانحفظ اوراق لنا .. مربوطة بتاريخ معين .

فأريد ان اعمل حقل يقوم بالترقيم التلقائي خلال سنه معينه ثم عند بداية السنة يبدأ الترقيم من البداية من جديد .

يعني

حقل للرقم وحقل للتاريخ ولكن يعتمد الترقيم على حسب تاريخ السنة .

id 1 : 1433

id 2 : 1433

id 3 : 1433

id 4 : 1433

id 5 : 1433

id 1 : 1434

id 2 : 1434

id 3 : 1434

id 4 : 1434

id 5 : 1434

ماهي الطريقة لعمل مثل هذا الترقيم

#2

الرابط الخاص بي

or

select max(id)+1 from table1 where nyear=1433

تم تعديل هذه المشاركة بواسطة KARIMSOFT في 25 يونيو 2012 في 22:07

#3

شاكر لك ياغالي ولكن .. انا اريد ان اجعل الترقيم تلقائي لحقل الترقيم بشرط

يكون معتمد على حقل تاريخ السنة .

ولا اعلم الكود بالأعلى اين اضعه . !!

ياليت موقعك الخاص بك يكون ايضاً هناك شرح باللغة العربية له .. لكان استفدت منه كثيراً واستفدت انت ايضاً من الزوار .

فكثير منا اللغة الانجليزية تمشية حال ياغالي ويبقى مع استفساره يفك طلاسم ويترجم الشرح :huh:

تم تعديل هذه المشاركة بواسطة الاناكوندا في 26 يونيو 2012 في 06:56

#4

السلام عليكم

لايوجد حقل ترقيم تلقائي حسب السنة او شيء آخر وانما الترقيم التلقائي يكون للجدول كامل .

الحل هو عمل ترقيم يدوي كما ذكر الاخ كريم بحيث توقم بتنفيذ جملة الاستعلام التي ذكرها الاخ في برنامج واسترجاع هذا الرقم ثم اسناده للرقم الذي تريده ان يكون متسلسل .

لذا نرجو منك وضع الكود الذي تقوم بالتخزين من خلاله لنساعدك اكثر في وضع الكود .

#5

ياغالي .. هناك معاملات تحفظ في القاعدة برقم متسلسل خلال السنة الحالية.

مثلاً .. عند عملية الإدخال للمعلومات يتم تخزين بحقل التاريخ تاريخ السنة + بحقل الترقيم التلقائي الرقم المتسلسل .

وعند الاستفسار عن معاملة مثل الشركات او المؤسسات الحكومية

تجد مكتوب لك عند الاستفسار

ادخل رقم المعاملة

ادخل السنة

مثلاً المعاملة رقم 200 بتاريخ 1433هـ

وهناك ايضاً معاملة رقم 200 بتاريخ 1432هـ

وهناك ايضاً معاملة رقم 200 بتاريخ 1431هـ

اتمنى وصلت الفكرة هذا ما اريده بأن الرقم التسلسلي يبدأ مع بداية السنة إلى نهايتها .

هذا ما اريد ان افهمه لطريقة عملها .

#6

اتبع خطوات الفكره للاختبار

اولا انشاء هذا الجدول

CREATE TABLE [dbo].[_Test](
	[nID] [int] NOT NULL,
	[sName] [nchar](10) NULL,
	[dDate] [datetime] NOT NULL,
 CONSTRAINT [PK__Test] PRIMARY KEY CLUSTERED 
(
	[nID] ASC,
	[dDate] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

ALTER TABLE [dbo].[_Test] ADD  CONSTRAINT [DF__Test_nID]  DEFAULT (datepart(nanosecond,sysdatetimeoffset())) FOR [nID]
GO

ثانيا انشاء الترجير هذا

CREATE TRIGGER [dbo].[TrgUpdateId] 
	on [dbo].[_Test]
   AFTER INSERT
AS 
BEGIN
	declare @nYear int=0
	declare @nID  int=0

	select @nID =nID ,@nYear=year(dDate) from inserted

	update _Test
	set nID=(select isnull(max(nId),0)+1 from [dbo].[_Test] where year(dDate)=@nYear and nID <>@nID )
	where nID= @nID 
END

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

تم تعديل هذه المشاركة بواسطة KARIMSOFT في 26 يونيو 2012 في 14:48

#7

:S انت الوحيد الذي لا افهم شلون اطبق اجاباته .

فأنت تتكلم عن اشياء بالنسبة لي كمبتدئ لا اعلم من اين ابدأ بها .

اخي الغالي ارسلت لك رسالة على بريدك اتمنى الرد علي بها على البريد الاليكتروني .

وباللنسبة للإستفسار . انا انشاء الجداول بالماوس ليس بالأمر لقاعدة البيانات .

والحقول الموجوده مثل ماذكرت لك مثلاً id و data .

ياليت تعلمنا ماذا افعل؟ هل اكتب الكود ببرنامج sql او بستعلام بـ asp.net او اين بالضبط .

فالأمور مخربطه وملخبطه في مخيخي الصغير .

:sad:

#8

الفكره بسيطه اول اضع قيمه عشوائية من الوقت في عملية الادخال في الحقل id من خلال DEFAULT value

ALTER TABLE [dbo].[_Test] ADD  CONSTRAINT [DF__Test_nID]  DEFAULT (datepart(nanosecond,sysdatetimeoffset())) FOR [nID]

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

CREATE TRIGGER [dbo].[TrgUpdateId] 
        on [dbo].[_Test]
   AFTER INSERT
AS 
BEGIN
        declare @nYear int=0
        declare @nID  int=0

        select @nID =nID ,@nYear=year(dDate) from inserted

        update _Test
        set nID=(select isnull(max(nId),0)+1 from [dbo].[_Test] where year(dDate)=@nYear and nID <>@nID )
        where nID= @nID 
END

كل هذا في قاعدة البيانات

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…