سلام چطور میتونیم اطلاعات (ردیف) های یک جدول رو به ترتیب تاریخ یا زمان درج اونها مرتب و نمایش بدیم .
یعنی میخوام ببینم اطلاعات یک جدول آخرین بار کی ویرایش یا آخرین چیزی که به جدول اضافه شده چه چیزی هستش ؟
توی اینترنت 3 تا راه پیدا کردم ولی راه حل مناسبی نیست !
1- استفاده از Log های SQL Server
2- فعال سازی قابلیت DataCapture برای جداولمون که ایندفعه خودش میاد ساعت و زمان رو برای هر رکورد ثبت میکنه
3- یا خودمون بیایم یک فیلد تاریخ یا زمان کنارش بذاریم و در زمان اضافه شدن یا تغییر زمان مربوطه کنارش ثبت بشه
ولی این راه حل ها باعث بیشتر شدن حجم دیتابیس میشن
و اینکه باید یک چیزی برای رکورد ها باشه که بر اساس اون بشه یه لیست از ترتیب تاریخ اضافه شدن ردیف ها به جدول یا تغییرات اونها بدست آورد
ببینید روش هایی که شما در گوگل سرچ کردید و پیدا کردید همه درست اما بنده در پروژه هایی که کار می کنیم همیشه در جداول مهم و عملیاتی خودمون یک ستون به عنوان تاریخ ایجاد رکورد و یک ستون هم به عنوان آخرین تاریخ ویرایش رکورد در نظر می گیریم. این روشی هست که در پروژه های واقعی و بزرگ انجام میشه. روش کار هم براتون در ادامه توضیح میدم. ضمنا برای انجام این کار باید با تریگرها در Sql Server هم آشنا باشید که یک مثال از تریگر هم میزنم براتون.
خب یک مثال رو از ابتدا انجام میدیم. در ابتدا یک دیتابیس خالی به نام myDataBase در Sql Server ایجاد می کنیم. برای این کار فقط کافیه Sql Server رو باز کنید و دستور زیر را اجرا کنید.
Create DataBase MyDataBase
خب حالا یک جدول با فیلدهای زیر ایجاد می کنیم.
Create Table MyTable
(Id int Identity(1,1) primary key not null,FirstName varchar(50), Family varchar(150),CreateDateTime DateTime Default GetDate(), ModifyDateTime DateTime Null)
همونطوری که می بینید این جدول دارای فیلدهای زیر می باشد.
خب حالا یک رکورد را در جدول MyTable ثبت می کنیم. با استفاده از دستور Insert این کار انجام می شود.
Insert Into MyTable (FirstName,Family) Values ('Ali','Yaraghy')
اگر دستور Insert را اجرا کنید باید چیزی مشابه با تصویر زیر داشته باشید.
همانطور که می بینید فیلد CreateDateTime به صورت اتوماتیک تاریخ و زمان ثبت اطلاعات را ذخیره کرده است. همچنین مقدار فیلد ModifyDateTime هم به صورت پیش فرض null می باشد. حالا می خواهیم وقتی رکورد ویرایش شد مقدار ModifyDateTime هم تاریخ و ساعت ثبت ویرایش را ثبت کند.
در ابتدا بهتر است که مفهوم تریگر در Sql Server را بدانید. به صورت خیلی خلاصه و ساده تریگرها دستوراتی هستند که می توانند به جای دستورات یا بعد از دستورات Insert یا Update یا Delete در Sql Server اجرا شوند.
تریگر ها در کل 2 نوع هستند.
خب ما میخواستیم وقتی رکوردی ویرایش می شود در فیلد ModifyDateTime تاریخ و ساعت دقیق عملیات ویرایش ثبت شود. در اینجا می توانیم از After Trigger استفاده کنیم. یعنی بگوییم به محض ویرایش رکورد فیلد ModifyDateTime با مقدار تاریخ و ساعت پر شود.
جدول را باز کنید. روی پوشه Trigger کلیک راست کنید گزینه New Trigger را بزنید.
خب حالا دستورات را به صورت زیر ویرایش کنید و دکمه F5 را بزنید تا یک تریگر بر روی جدول شما ایجاد شود.
Create Trigger [dbo].[Trg_Update] On [dbo].[myTable]
After Update
As Begin
Update myTable Set ModifyDateTime = GETDATE()
Where myTable.id = (Select d.id from deleted d)
End
در دستورات بالا یک تریگر After Update ایجاد کردیم. یعنی هر وقت ویرایشی صورت بگیرد بعد از اتمام عملیات ویرایش دستورات تریگر اجرا می شود. و در بدنه تریگر هم فیلد ModifyDateTime را با تاریخ و ساعت روز مقدار دهی کردیم.
نکته : جدول deleted یک جدول Temp می باشد که به صورت پیش فرض در همه دیتابیس ها وجود دارد.
خب حالا اگر ویرایشی روی رکوردهای خودتون انجام بدید می بینید که مقدار ModifyDateTime هم پر میشه.
جهت ویرایش رکورد در جدول دستور زیر را بنویسید و اجرا کنید.
Update MyTable Set FirstName = 'Hamed'
خب حالا اگر یک Select از جدول myTable اجرا کنید باید چیزی مشابه زیر داشته باشید
خب شما با انجام این کارها در جداول خودتون در Sql Server هم زمان و تاریخ ثبت اطلاعات رو دارید و هم زمان و تاریخ ویرایش اطلاعات و به راحتی میتونید هر گزارشی که می خواهید از اطلاعاتتون داشته باشید.
تاریخ :
1399/09/04
- ساعت :
06:18:00 PM
- بازدید :
6526
- پاسخ :
2
|
تاریخ :
1403/10/07
- ساعت :
03:12:00 PM
- بازدید :
199
- پاسخ :
2
|
تاریخ :
1403/09/06
- ساعت :
09:51:00 PM
- بازدید :
266
- پاسخ :
2
|
تاریخ :
1402/07/23
- ساعت :
04:01:00 PM
- بازدید :
1219
- پاسخ :
1
|
تاریخ :
1400/08/02
- ساعت :
02:35:00 PM
- بازدید :
2652
- پاسخ :
1
|
تاریخ :
1403/01/15
- ساعت :
04:12:00 PM
- بازدید :
889
- پاسخ :
2
|
تاریخ :
1402/10/18
- ساعت :
10:45:00 PM
- بازدید :
780
- پاسخ :
2
|
تاریخ :
1402/08/18
- ساعت :
08:43:00 AM
- بازدید :
1449
- پاسخ :
0
|
تاریخ :
1402/08/16
- ساعت :
09:45:00 PM
- بازدید :
1125
- پاسخ :
1
|
تاریخ :
1402/06/27
- ساعت :
12:27:00 PM
- بازدید :
1578
- پاسخ :
2
|
تاریخ :
1403/11/03
- ساعت :
07:34:00 PM
- بازدید :
54
- پاسخ :
0
|
تاریخ :
1399/12/20
- ساعت :
10:32:00 AM
- بازدید :
2518
- پاسخ :
1
|
تاریخ :
1398/08/09
- ساعت :
07:44:00 PM
- بازدید :
4856
- پاسخ :
1
|
تاریخ :
1399/09/20
- ساعت :
01:30:00 PM
- بازدید :
2573
- پاسخ :
1
|
تاریخ :
1403/11/03
- ساعت :
07:21:00 PM
- بازدید :
40
- پاسخ :
0
|
تاریخ :
1403/10/22
- ساعت :
12:29:00 PM
- بازدید :
84
- پاسخ :
1
|
تاریخ :
1399/09/20
- ساعت :
01:21:00 PM
- بازدید :
6646
- پاسخ :
1
|
تاریخ :
1403/11/02
- ساعت :
08:17:00 PM
- بازدید :
46
- پاسخ :
0
|
تاریخ :
1398/10/15
- ساعت :
08:02:00 PM
- بازدید :
2729
- پاسخ :
1
|
تاریخ :
1398/10/19
- ساعت :
02:01:00 PM
- بازدید :
3088
- پاسخ :
2
|