ورود

View Full Version : سوال: پاک کردن جدول بعد از یه حد خاصی داده



f_g1348
یک شنبه 26 اردیبهشت 1389, 18:55 عصر
سلام
من چطور میتونم یه trigger بنویسم که مثلا وقتی داده های جدول فلان از یه حد خاص بیشتر شد فلان جدول(جدول دیگری) را پاک کن؟
یا یه چیز تو همین مایه ها

محمد سلیم آبادی
یک شنبه 26 اردیبهشت 1389, 19:22 عصر
کافیه بعد از هر بار درج در جدول اول بررسی کنید که آیا تعداد سطرها به مقدار مورد نظر رسیده سپس در صورت رسیدن داده های جدول دوم را حذف کنید با کمک AFTER INSERT TRIGGER:

CREATE TRIGGER after_insert_trigger
ON table_name_first
AFTER INSERT
AS
BEGIN
IF (SELECT COUNT(*) FROM (SELECT 1 FROM table_name_first UNION ALL SELECT 1 FROM inserted)d(i))>= 1000
DELETE FROM table_name_second
END

f_g1348
یک شنبه 26 اردیبهشت 1389, 23:03 عصر
میشه یه کمی در رابطه با این کد بیشتر توضیح بدهید؟
یعنی چطور دقیقا هر بخشش کار میکنه؟

محمد سلیم آبادی
یک شنبه 26 اردیبهشت 1389, 23:23 عصر
بهتر هست به اینجا یک سری بزنید:
http://msdn.microsoft.com/en-us/library/ms189799.aspx

بخش خاصی نداره. در صورتی که با Trigger آشنا باشین می تونید به سادگی به منطقش پی ببرین.

من داده های موجود در جدول مورد نظر را با داده هایی که جدیدا درج شدن اجتماع کردم (با UNION ALL) سپس تعداد سطر را بدست آوردم (با COUNT) سپس با یک مقداری مقایسه کردم که نتیجش یک عبارت boolean شده، در صورتی که این عبارت برابر با TRUE باشد جدول دوم داده هایش حذف خواهند شد.

f_g1348
دوشنبه 27 اردیبهشت 1389, 09:13 صبح
حالا یه سوال اگر این دستور را بنویسیم به نظرتون درسته؟
if select count(*) from tbl_1 >1000
delete from tbl_2

محمد سلیم آبادی
دوشنبه 27 اردیبهشت 1389, 09:36 صبح
حالا یه سوال اگر این دستور را بنویسیم به نظرتون درسته؟
if (select count(*) from tbl_1) >1000
delete from tbl_2

باید subquery داخل پرانتز باشد

f_g1348
سه شنبه 28 اردیبهشت 1389, 01:13 صبح
حالا دوست عزیز یه سوال
حقیقتش من توی یه شرکت کار می کردم و ازم می خواستم تا برنامه ای را برایشان بنویسم و گفته بودن بعد از آن استخدامم می کنن ولی حالا که برنامه تموم شده سورس را از من گرفته و من را اخراج کردن و اگر برنامه را کامل تحویل ندهم ازم شکایت می کنند ومن هم می خواهم حقم خورده نشه و برای همین هم به این فکر افتادم تا یه تریگری یا چیزی بنویسم و در آخر به دیتا بیس اضافه کنم که بعد از مدتی مثلا جداول و یا حتی sp ها رو پاک کنه اگر نظر خاصی یا راه بهتری بلدید به من کمک کنید
یا علی

حسین شهریاری
سه شنبه 28 اردیبهشت 1389, 07:50 صبح
سلام

دوست عزیز چرا اینقدر شما ساده هستید؟مگه قراردادی با شما بسته اند که شما را تحدید به شکایت میکنن؟بر طبق کدوم سند و مدرک میخان شکایت کنن؟نیازی به این کارا نیست سعی کنید منطقی باشید.شرکتی که از همین اول میخاد دو دوزه بازی در بیاره و اخلاق را زیر پا قرار بده ارزش همکاری نداره!!

اگه واقعا از دید اخلاقی و شرعی شما مبلغی گرفتین یا اونا در قبال این برنامه برای شما کاری انجام دادن بله شما اخلاقا و شرعا مسئول هستید.ولی اینطور که شما فرمودید خیر ، قرار بوده شما استخدام بشید که نشدید پس مسئولیتی ندارید.

در ضمن همون پست شماره2 کار شما را حل میکنه.در ضمن مدیران ارشد شرکتی که نتونن از یه تریگر ساده سردر بیارن و شما بتونی اونا را دور بزنی فکر نکنم از دید فنی ارزش همکاری داشته باشن.

f_g1348
سه شنبه 28 اردیبهشت 1389, 11:47 صبح
با تشکر از شما
ولی این شرکت با من قرارداد 3 ماهه اولیه بست به عنوان مدیر نرم افزار به این عنوان که بعد از این سه ماه منو استخدام کنه ولی حالا این شده و نیز با پیگیری های من از اداره کار اونها می تونن به خاطر عنوان شغلی من از من به خاطر این برنامه شکایت کنند