# پایگاه‌های داده > SQL Server > حرفه ای: پاک کردن تمام اطلاعات در دیتابیس

## Arash_janusV3

سلام 
با چه دستوری(scrip) می تونم تمام اطلاعات یک دیتابیس رو پاک کنم؟
ممنون

----------


## fa_karoon

سلام فکر می کنم با دستور Truncate تمام رکوردهای یک جدول رو می تونی پاک کنی اگه اشتباه نکنم فیلد ID هم بعد از اون دیگه از یک شروع می شه

----------


## parsidev

یکی راه های ساده حذف اطلاعات جداول نه بانک ها استفاده از دستور ترانکیته که دوستمون فرمودن اما روش دیگری هم وجود داره

Delete * from tablename


کوئری بالا رو اجرا کنید و به جای tablename نام جدول مورد نظر رو بذارین
با احترام

----------


## bahar123

سلام
دستوری برای اینکار وجود ندارد
میتونی یک sp بنویسی و این دستور رو برای تک تک جداولت بنویسی و در انتها executeش کنی:

truncate table <table name>

----------


## حمیدرضاصادقیان

سلام.




> سلام فکر می کنم با دستور Truncate تمام رکوردهای یک جدول رو می تونی پاک کنی


با این دستور میشه ولی اگر بین جداول Relation داشته باشند خطا دریافت میکنند.




> Delete * from tablename


این دستور اشتباه هست و نیازی به * نیست.



> دستوری برای اینکار وجود ندارد
> میتونی یک sp بنویسی و این دستور رو برای تک تک جداولت بنویسی و در انتها executeش کنی


نیازی به اینکار نیست.
میشه باکد زیر خیلی راحت اینکارو انجام داد.

Exec Sp_MsforEachTable 'Delete from ?'

با این دستور تمامی رکوردهای موجود در تمامی جداول در یک دیتابیس حذف خواهد شد.

موفق باشید

----------


## parsidev

> این دستور اشتباه هست و نیازی به * نیست.
> دستوری برای اینکار وجود ندارد
> میتونی یک sp بنویسی و این دستور رو برای تک تک جداولت بنویسی و در انتها executeش کنی


درسته یه اشتباه از من بود...
ستاره برای حذف کاربردی نداره

----------


## Arash_janusV3

با تشکر از همه دوستان به خصوص جناب حمیدرضا صادقیان
من یک امکانی رو می خوام به برنامه ام اضافه کنم تحت عنوان حذف اطلاعات برنامه به خاطر همین باید بتونم اطلاعات کل دیتابیس رو یک جا حذف کنم اگر یک scrip هم باشه کارم راه می افته
من در تمام فرمهام حذف table رو دارم و بخاطر زیاد بودن انها و گرفتن وقت زیاد می خوام این امکان هم باشه


Exec Sp_MsforEachTable 'Delete from ?'

آیا این دستور اطلاعات دیتابیس رو حذف می کنه؟؟؟ 
ممنون

----------


## Rejnev

لطفا کار علامت سوال رو هم در پارامتر این پروسیجر توضیح بدید. چه دستوراتی رو میشه به عنوان پارامتر به اون فرستاد و اون چطوری دستورات رو اجرا میکنه؟

----------


## حمیدرضاصادقیان

سلام.
این دستور در واقع خودش یک Cursor رو اجرا میکنه و روی دیتابیسی که در حال اجراست دستور ارسال شده رو برای همه جداول انجام خواهد داد.
کار علامت سوال در واقع یعنی اینکه همه جداول رو شامل بشه.
برای توضیحات بیشتر *این لینک* رو نگاه کنید.

----------


## mohammadjp

در لینکهای زیر اطلاعات کاملی وجو داره
http://forum.codecorona.com/showthread.php?tid=1180
http://vahidnasiri.blogspot.com/2009/03/sql-server.html

----------


## Arash_janusV3

سلام 
باتشکر از دوستان 
همه چی حل شده
فقط من فزاموش کرده بودم که یک table هام نباید داده هاش خالی بشه در scrip delet  باید چه دستوری رو بهش اضافه کنیم؟
اگر برای trigger هم بگید خیلی خیلی ممنون می شم
باسپاس

----------


## Rejnev

همون دستور منتهي به اينصورت:

sp_msForeachTable 'if ''?''<>'tblUsers' delete from ?'

يا يك چيزي تو اين مايه ها ببين كار ميكنه.

----------


## Arash_janusV3

من هنور نتونستم اطلاعات یک table رو نگه دارم بقیه رو پاک کنم 
لطفا راهنمایی کنید
ممنون

----------


## Arash_janusV3

> سلام 
> باتشکر از دوستان 
> همه چی حل شده
> فقط من فزاموش کرده بودم که یک table هام نباید داده هاش خالی بشه در scrip delet باید چه دستوری رو بهش اضافه کنیم؟
> اگر برای trigger هم بگید خیلی خیلی ممنون می شم
> باسپاس


من هنوز این مشکل رو دارم 
ممنون

----------


## Rejnev

كافي بود يك ذره خودت كار ميكردي و امتحان ميكردي تا دقيقا به همون جوابي كه من رسيدم ميرسيدي:
EXEC sp_msforeachtable 'if ''"?"''<>''"[dbo].[t]"'' select * from ?'
t نام جدوليه كه نميخوايم select گرفته بشه. حالا شما جاي select از delete يا هر چيز ديگه اي كه ميخواي استفاده كن
پرسيدن خوبه. ولي دنبال كردن سرنخ و يادگيري خود آدم خيلي بهتر از اينه كه لقمه رو آماده بدن به ما.

----------

