PDA

View Full Version : انتخاب آخرین رکوردهای تغییر کرده در دیتابیس



hossein_rohollah
جمعه 25 فروردین 1391, 09:16 صبح
سلام
من می خوام که از دیتابیس 10 رکورد بالا رو که آخرین تغییرات روشون اعمال شده رو ببینم چه آخرین رکورد درج شده و چه آخرین رکورد تغییر کرده

lastmory
جمعه 25 فروردین 1391, 09:29 صبح
سلام برای اینکه 10 تا رکورد آخر رو همیشه ببینی
با فرض اینکه یه آی دی داری که یکی یکی زیاد میشه بعد از هر Insert
Select TOP 10 * From Tbl_1 ORDER BY Id DESC

hossein_rohollah
جمعه 25 فروردین 1391, 09:52 صبح
سلام اگر فیلد Autonumber نداشته باشیم که یکی یکی اضاف شود چکار باید کرد؟

Galawij
جمعه 25 فروردین 1391, 11:04 صبح
سلام،
قبلاً در موردش بحث شده (http://barnamenevis.org/showthread.php?288288-%D8%A7%D9%86%D8%AA%D8%AE%D8%A7%D8%A8-%D8%B1%DA%A9%D9%88%D8%B1%D8%AF-%D8%AF%D9%87%D9%85-%D8%AA%D8%A7-%D8%A8%DB%8C%D8%B3%D8%AA%D9%85-%D8%A7%D8%B2-%DB%8C%DA%A9-%D8%AC%D8%AF%D9%88%D9%84&p=1268639&highlight=#post1268639).

hossein_rohollah
جمعه 25 فروردین 1391, 13:22 عصر
سلام،
قبلاً در موردش بحث شده (http://barnamenevis.org/showthread.php?288288-%D8%A7%D9%86%D8%AA%D8%AE%D8%A7%D8%A8-%D8%B1%DA%A9%D9%88%D8%B1%D8%AF-%D8%AF%D9%87%D9%85-%D8%AA%D8%A7-%D8%A8%DB%8C%D8%B3%D8%AA%D9%85-%D8%A7%D8%B2-%DB%8C%DA%A9-%D8%AC%D8%AF%D9%88%D9%84&p=1268639&highlight=#post1268639).


می بخشی من می خوام که دستور select ام جدولی رو بده که رکوردهای جدید ایجاد شده و یا تغییر داده شده در سطر های اول باشند

حمیدرضاصادقیان
شنبه 26 فروردین 1391, 09:58 صبح
سلام.
شما باید در ساختار جداولتون یک فیلد به نام Timestamp داشته باشید.
این فیلد هر دفعه که محتویات یک ردیف تغییر میکنه ، عوض میشه. به راحتی میتونید گزارش مربوطه رو تهیه کنید. البته هردفعه باید Timestamp قدیم رو هم داشته باشید تا بتونید باهاش چک کنید مثلا میتونید در همون جدول یک فیلد رشته ای داشته باشیدو باهربار تغییر مقدار قدیم رو در فیلد رشته ای ریخته تا مقدار جدید جایگزین بشه.
یا شما وقتی که در Dataset کل داده ها رو فراخوانی میکنید و وقتی دیتا رو تغییر میدید آخرین مقدار این فیلد هنوز در Dataset شما تغییر نکرده که بعداز Update میتونید با استفاده از مقدار این فیلد در Dataset مقدار فیلدهای تغییر کرده رو بخونید و نیازی به تعریف فیلد رشته ای نیز نمی باشد.
همچنین میتونید از RowVersion در نسخه 2012 نیز برای این مورد استفاده کنید.
برای توضیحات تکمیل تر پیشنهاد میکنم به این لینک (http://msdn.microsoft.com/en-us/library/ms182776%28v=sql.90%29.aspx) و این لینک (http://msdn.microsoft.com/en-us/library/ms182776.aspx) سری بزنید.

SReza1
سه شنبه 29 فروردین 1391, 16:06 عصر
سلام.
شما باید در ساختار جداولتون یک فیلد به نام Timestamp داشته باشید.
این فیلد هر دفعه که محتویات یک ردیف تغییر میکنه ، عوض میشه. به راحتی میتونید گزارش مربوطه رو تهیه کنید. البته هردفعه باید Timestamp قدیم رو هم داشته باشید تا بتونید باهاش چک کنید مثلا میتونید در همون جدول یک فیلد رشته ای داشته باشیدو باهربار تغییر مقدار قدیم رو در فیلد رشته ای ریخته تا مقدار جدید جایگزین بشه.
یا شما وقتی که در Dataset کل داده ها رو فراخوانی میکنید و وقتی دیتا رو تغییر میدید آخرین مقدار این فیلد هنوز در Dataset شما تغییر نکرده که بعداز Update میتونید با استفاده از مقدار این فیلد در Dataset مقدار فیلدهای تغییر کرده رو بخونید و نیازی به تعریف فیلد رشته ای نیز نمی باشد.
همچنین میتونید از RowVersion در نسخه 2012 نیز برای این مورد استفاده کنید.
برای توضیحات تکمیل تر پیشنهاد میکنم به این لینک (http://msdn.microsoft.com/en-us/library/ms182776%28v=sql.90%29.aspx) و این لینک (http://msdn.microsoft.com/en-us/library/ms182776.aspx) سری بزنید.

تا اونجا كه من ميدونم با هر تغيير در ركورد، timestamp هم تغيير ميكنه. حال فرض كنيد تمام ركوردها بروز شوند. timestamp قبلي هم جايي نگه داشته باشيم. ما فقط مي‌توانيم بفهميم چه ركوردهايي تغيير كرده‌اند نه اينكه آخرين تغييرات كدوم ركوردها بودند. به نظر من ميشه با يك تريگر اينكار رو انجام داد و بعد از هر تغيير فيلد كليد اونو در يك table ديگه كپي كرد. با گزارش گرفتن از اون ميشه فهميد چه ركوردهايي آخرين تغييرات را داشتند. البته ميشه از روشها log ديگر هم استفاده نمود

حمیدرضاصادقیان
چهارشنبه 30 فروردین 1391, 13:31 عصر
البته من به نکته آخرین تغییرات دقت نکردم. البته میشه با استفاده از CDC در نسخه 2008 خیلی راحت از این مورد استفاده کرد.