PDA

View Full Version : انجام عمل حذف در داخل بانک اطلاعاتی در صورت رسیدن رکورد ها به حد مورد نظر



sara_aryanfar
چهارشنبه 28 تیر 1391, 21:57 عصر
با سلام ما اگر بخواهیم وقتی رکورد های دیتا بیس ما از یک مرض مشخص مثلا یک میلیون رکورد عبور کرد 100 هزار تای اون حذف بشه چه روشی رو پیشنهاد می کنید توجه کنید که رکود های قدیمیتر رو می خوام حذف کنم و ایندستور داخل خود دیتابیس اجرا بشه نه با فراخوانی برنامه ؟ممنون

TeacherMath
چهارشنبه 28 تیر 1391, 22:27 عصر
شاید با تریگر بشه.

http://www.sqlteam.com/article/an-introduction-to-triggers-part-i

http://technet.microsoft.com/en-us/library/ms189799.aspx

https://www.google.com/webhp?sourceid=chrome-instant&ie=UTF-8#hl=en&safe=off&sclient=psy-ab&q=triger%20in%20sql%20&oq=&gs_l=&pbx=1&fp=d6725f746f57f9b6&bav=on.2,or.r_gc.r_pw.r_cp.r_qf.,cf.osb&biw=1360&bih=610

http://barnamenevis.org/showthread.php?296640-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%DA%A9%D8%A7%D8%B1-%D8%A8%D8%A7-%D8%AA%D8%B1%DB%8C%DA%AF%D8%B1

download69
چهارشنبه 28 تیر 1391, 23:13 عصر
من قبلا برای یک سیستم تبلیغات کلیکی این کار رو کرده بودم که
یک تبلیغ دهنده وقتی تبلیغش رو ثبت میکرد تعداد کلیک بر روی تبلیغ رو هم انتخاب میکرد مثلا 100 تا
و این تبلیغ انتقضاش میشد وقتی که 100 بار کلیک روش میشد یعنی بعد از 100بار کلیک بر روی این تبلیغ به صورت اتومات حذف میشد
حالا اگر همچین چیزی میخواید بگید تا توضیح بدم

sam166
چهارشنبه 28 تیر 1391, 23:52 عصر
خب یه روشش اینه که موقع درج رکور ابتدا بیاید تعداد رکورد های موجود رو بشمارید بعد اگه به مرز مورد نظر شما رسیده بود حذف کنه و بعد رکورد های جدید رو اضافه کنه
در غیر اینصور اگر هنوز رکورد ها به حد مرز نرسیده درج رو انجام بده

sara_aryanfar
پنج شنبه 29 تیر 1391, 00:05 صبح
با توجه به توضثیحاتی که تو یک سایت دیدم تریگر برای این موارد بهتره چون دارای سرعت بالایی هست

fakhravari
پنج شنبه 29 تیر 1391, 00:36 صبح
یه نمونه تریگر.
ALTER TRIGGER [dbo].[DeletePost]
ON [dbo].[TBLNews]
AFTER DELETE
AS
BEGIN

declare @NewsID int;
set @NewsID = (SELECT NewsID FROM DELETED)
DELETE FROM Comments WHERE PostID=@NewsID
END

sara_aryanfar
پنج شنبه 29 تیر 1391, 09:46 صبح
یه نمونه تریگر.
ALTER TRIGGER [dbo].[DeletePost]
ON [dbo].[TBLNews]
AFTER DELETE
AS
BEGIN

declare @NewsID int;
set @NewsID = (SELECT NewsID FROM DELETED)
DELETE FROM Comments WHERE PostID=@NewsID
END
میشه در مورد کدتون توضیح مختصری بدین اینکه تعداد رکورد ها از کجا به دست میاد و اینکه این کار در واقع باید بعد از درج داده در جدول صورت بگیره یعنی فرض کنید ما الان یک رکورد در پایگاه ثبت می کنیم در این لحظه تریگر اجرا و اگه تعداد داره به یک میلیون رسیده بشه 100 هزارتا از اون حذف بشه این چطوریه؟

fakhravari
پنج شنبه 29 تیر 1391, 14:51 عصر
سوال خیلی اسونی هست اما توی بخش SQL سوال بکردید بهتر جواب میدادن.
کد بالا تمام نظر هایی حذف میکنه که پست ان حذف شده باشد.

sara_aryanfar
پنج شنبه 29 تیر 1391, 15:23 عصر
من با پست کاری ندارم خب فقط می خوام وقتی تعداد رکورد یک جدول رسید به یک میلیون این بیاد صد هزار رکورد قدیمی تر اون رو حذف کنه

saeed_sho
پنج شنبه 29 تیر 1391, 16:08 عصر
دوست عزیز من درگیر یه پروژم و وقت ندارم زیاد توضیح بدم اما تقریبا یه همچین کدی میشه
CREATE TRIGGER DeleteSs
ON Persons
AFTER INSERT
AS
BEGIN
declare @id int
set @id=(select count(PersonId) from Persons)
if (@id >= 1000)
delete from Persons where PersonID <= @id-900
END

saeed_sho
پنج شنبه 29 تیر 1391, 18:03 عصر
فکر کنم شرط قسمت حذف کردنش اشتباهه

saeed_sho
پنج شنبه 29 تیر 1391, 20:51 عصر
اینو امتحان کنید ببینید مشکلتون حل میشه
CREATE TRIGGER DeleteSs
ON Persons
AFTER INSERT
AS
BEGIN
declare @id int, @maxid int
set @id=(select count(PersonId) from Persons)
set @maxid=(select MAX(PersonId) from Persons)
if (@id >= 1000)
delete from Persons where PersonID <= @maxid-900
END