PDA

View Full Version : سوال: مشکل با حذف خودکار رکورد با شرط از بانک



ghamgin
جمعه 13 اردیبهشت 1392, 10:21 صبح
سلام
چکار کنم که وقتی تعداد رکودهای بانک (sql) مثلا 50 تا شد
(البته شماره id ها پشت سر هم نیست و ممکنه چند تا بین شون پاک شده باشه مثلا 1 2 4 8 ..)
خودکار 20 تا رکورد اول جدول توی بانک پاک بشه(یعنی قدیم ها پاک شه)
ممنون

Me3ter
جمعه 13 اردیبهشت 1392, 10:37 صبح
سلام
DELETE TOP (20)
FROM TblName
WHERE sharteto benevis age shart dare;

khayyams.votary
جمعه 13 اردیبهشت 1392, 14:47 عصر
شما میتونید در بانکتون برای اون جدول خواص یک تیریگر ایجاد کنید که به صورت خودکار بعد از هر عمل insert جدول رو چک کنه و اگه به مقدار مورد نظر شما رسیده بود عمل مورد نظر شما رو انجام بده
create trigger tri_inserts on (a)
after insert
as
if (select count(*) from TblName)>50
begin
DELETE TOP (20) FROM TblName
end

asemaneiran
جمعه 13 اردیبهشت 1392, 15:54 عصر
شما میتونید در بانکتون برای اون جدول خواص یک تیریگر ایجاد کنید که به صورت خودکار بعد از هر عمل insert جدول رو چک کنه و اگه به مقدار مورد نظر شما رسیده بود عمل مورد نظر شما رو انجام بده
create trigger tri_inserts on (a)
after insert
as
if (select count(*) from TblName)>50
begin
DELETE TOP (20) FROM TblName
end

با c# چی میشه؟
ممنون میشم بگید

ghamgin
دوشنبه 16 اردیبهشت 1392, 09:37 صبح
سلام
ممنون
نمونه ای با سی شارپ ندارید؟؟

Rezahak
دوشنبه 16 اردیبهشت 1392, 10:06 صبح
سلام
ممنون
نمونه ای با سی شارپ ندارید؟؟

همین کدی رو که دوستمون نوشت if (select count(*) from TblName)>50
begin
DELETE TOP (20) FROM TblName
end رو به همراه درج رکورد جدید داخل یک stored procedure بنویسید و داخل برنامه از آن استفاده کنید
البته بهتره از همون trigger استفاده کنید .

gilas1368
دوشنبه 16 اردیبهشت 1392, 12:12 عصر
از این استفاده کن


sqlconnection con=new sqlconnection("آدرس پایگاه داده");
sqlcommand com=new sqlcommand("select * from TableName",con);
sqldataadapter da=new sqldataadapter(com);
datatable dt=new datatable();
con.open();
da.fill(dt);
if(dt.rows.count==50)
{
sqlcommand com_delete=new sqlcommand("delete top(20) from TableName",con);
sqldataadapter da_delete=new sqldataadapter(com_delete);
datatable dt_delete=new datatable();
da_delete.fill(dt_delete);
con.close();
}

saeed_sho
دوشنبه 16 اردیبهشت 1392, 14:32 عصر
تریگر خیلی سریع تره و با اختلاف چند هزارم ثانیه انجام میشه
راه اصولیش تریگره

ghamgin
دوشنبه 16 اردیبهشت 1392, 16:13 عصر
ممنون
اما من stored procedure بلد نیستم؟؟:افسرده:

saeed_sho
دوشنبه 16 اردیبهشت 1392, 17:34 عصر
اینو تست کن از همه بهتره
create trigger [dbo].[tr_trigerName]
on table_name
after insert
as
begin
declare @count as int = (select count(*) from table_name)
if (@count >= 30)
begin
delete top (30) from table_name
end
end

ghamgin
سه شنبه 17 اردیبهشت 1392, 09:21 صبح
ممنونم دوست گلم
این با vb بود میشه با سی شارپ راهنمایی کنید و اینکه با stored procedure نباشه؟
و
ایا راهی هست که قبل از حذف اطلاعات(رکوردهای بانک) اونها رو در یک جایی مثل اکسل و یا نوت پد ذخیره کنه؟
(خواهش میکنم یه نمونه کوچک لطف کنید و بذارید)
ممنون میشم

ghamgin
سه شنبه 17 اردیبهشت 1392, 09:23 صبح
ممنونم دوست گلم
این با vb بود میشه با سی شارپ راهنمایی کنید و اینکه با stored procedure نباشه؟
و
ایا راهی هست که قبل از حذف اطلاعات(رکوردهای بانک) اونها رو در یک جایی مثل اکسل و یا نوت پد ذخیره کنه؟
(خواهش میکنم یه نمونه کوچک لطف کنید و بذارید)
ممنون میشم

saeed_sho
سه شنبه 17 اردیبهشت 1392, 18:19 عصر
ممنونم دوست گلم
این با vb بود میشه با سی شارپ راهنمایی کنید و اینکه با stored procedure نباشه؟
و
ایا راهی هست که قبل از حذف اطلاعات(رکوردهای بانک) اونها رو در یک جایی مثل اکسل و یا نوت پد ذخیره کنه؟
(خواهش میکنم یه نمونه کوچک لطف کنید و بذارید)
ممنون میشم

اون کدی که گذاشتم وی بی نبود اون t-sql و در دیتابیس مینویسن

ghamgin
چهارشنبه 18 اردیبهشت 1392, 09:41 صبح
میشه یه نمونه کوچیک بذارید؟
ممنون

ghamgin
پنج شنبه 19 اردیبهشت 1392, 09:01 صبح
کسی نمونه نداره؟؟

mousa1992
پنج شنبه 19 اردیبهشت 1392, 10:34 صبح
سلام trigger ها فک نکنم توی بانک های اطلاعاتی express جواب بده اگه میخوای همین عمل رو توی سی شارپ پیاده سازی کنی زحمتت زیاد میشه و باید بعد از هر بار ثبت داده ی کوئری هم بنویسی و بفرستی برای حذف رکوردهایی که باید حذف بشه - مقابل یادگیری مطالب جدید مقاومت نکن - برو تریگر هارو یاد بگیر و همینطور پروسیجر ها - خیلی سادست

موفق باشی