View Full Version : چطوری کلی رکورد رو Delete کنم؟
odiseh
چهارشنبه 19 دی 1386, 09:48 صبح
سلام
من باید چیزی حدود 28 میلیون رکورد رو از یه جدول حذف کنم ظاهرا دستور Delete ، Top نداره که تیکه تیکه اینکارو انجام بدم....
از طرفی اگه یه دفعه این همه رو Delete کنم سرور Hang میکنه.
لطفا راهنمایی کنید.
reza_rad
چهارشنبه 19 دی 1386, 10:17 صبح
تعداد کل رکوردهای جدولتون چقدره؟
مثلا اگه تعداد رکوردهای باقیمانده خیلی کمتر باشه بهتره اونهایی رو که می خواهید نگه دارید بریزید توی یه جدول دیگه و بعد نام جدولها رو عوض کنید.
ولی در کل برای پاک کردن تیکه تیکه با TOP اینکارو می تونید اینکارو بکنید:
Delete from tbl_test where field1 in
(
select top 100 filed1 from tbl_test
)
ولی بهتره در مورد کاری که می خواهید بکنید کمی توضیح بیشتر بدید شاید راه بهتره وجود داشته باشه.
Microsoft.net
چهارشنبه 19 دی 1386, 22:55 عصر
به نظر من اون جدول رو drop کن و دوباره Create کن . هم راحت و هم سریع
mrm0101
چهارشنبه 19 دی 1386, 23:38 عصر
سلام . خوب شما باید یک شرط معین داشته باشید که بخواهید 28 میلیون رکورد رو یک جا حذف کنی . این کار هم با کد نویسی صورت می گیرد . توصیه قبل از حذف حتما یک پشتیبان بگیر که بعد پشیمون نشی
SabaSabouhi
پنج شنبه 20 دی 1386, 09:12 صبح
با سلام
به نظر من هم جدول رو Drop کن و دوباره بساز خیلى سریع و راحت هست.
اگه هم مىخواهى تکه تکه حذف کنى مىتونى از حلقه استفاده کنى.
Declare @n as int
SET @n = 1000
WHILE 1 = 1
BEGIN
DELETE FROM MyTable WHERE MyID < @n
SET @n = @n + 1000
IF NOT EXIST ( SELECT * FROM MyTable ) BREAK
END
البته روش سریعى نیست، اما منظور شما رو از تکه تکه حذف کردن برآورده مىکنه.
صبا صبوحى
reza_rad
پنج شنبه 20 دی 1386, 09:29 صبح
به نظر من اون جدول رو drop کن و دوباره Create کن . هم راحت و هم سریع
با سلام
به نظر من هم جدول رو Drop کن و دوباره بساز خیلى سریع و راحت هست.
این روش وقتی مفیده که بخوان تمام اطلاعات جدول رو حذف کنن. ولی به نظر میرسه که ایشون می خوان قسمتی از رکوردهای جدول رو حذف کنند.
SYNDROME
پنج شنبه 20 دی 1386, 14:25 عصر
سلام
من باید چیزی حدود 28 میلیون رکورد رو از یه جدول حذف کنم ظاهرا دستور Delete ، Top نداره که تیکه تیکه اینکارو انجام بدم....
از طرفی اگه یه دفعه این همه رو Delete کنم سرور Hang میکنه.
دوست عزیز شما می خواهید کل رکوردها را حذف کنید یا تعداد رکوردهای بخصوصی را؟
اگر همه رکوردها را حذف کنی به قول دوستمان می توانی جدول را پاک کن و دوباره بسازی.
اگر هم تعداد بخوصی را می خواهی حذف کنی هم می توانی از یک جدول دیگر استفاده کنی تا اطلاعاتی را که می خواهی در آن بریزی و بقیه را حذف کنی(همانجوری مه Reza گفت) و یا یک فیلد در نظر بگیری و رکودها یی را که می خواهی مقدار 1 و آنها یی را که نمی خواهی مقدار صفر بدهید بعد به صورت کم کم آنها را حذف کنی.
موفق باشید
odiseh
شنبه 22 دی 1386, 14:12 عصر
دوست عزیز شما می خواهید کل رکوردها را حذف کنید یا تعداد رکوردهای بخصوصی را؟
اگر همه رکوردها را حذف کنی به قول دوستمان می توانی جدول را پاک کن و دوباره بسازی.
اگر هم تعداد بخوصی را می خواهی حذف کنی هم می توانی از یک جدول دیگر استفاده کنی تا اطلاعاتی را که می خواهی در آن بریزی و بقیه را حذف کنی(همانجوری مه Reza گفت) و یا یک فیلد در نظر بگیری و رکودها یی را که می خواهی مقدار 1 و آنها یی را که نمی خواهی مقدار صفر بدهید بعد به صورت کم کم آنها را حذف کنی.
موفق باشید
خوب عزیز من همین کم کم که میگی یعنی چطوری؟
من نمی خوام کل جدولم رو حذف کنم یه تعدادی از رکوردهای جدولم رو که همون طور که قبلا گفتم 28 میلین رکورد هست (کل جدولم حدود 90 میلیون رکورد داره)
reza_rad
شنبه 22 دی 1386, 14:48 عصر
خوب عزیز من همین کم کم که میگی یعنی چطوری؟
من نمی خوام کل جدولم رو حذف کنم یه تعدادی از رکوردهای جدولم رو که همون طور که قبلا گفتم 28 میلین رکورد هست (کل جدولم حدود 90 میلیون رکورد داره)
دوست عزیز می تونید یک اسکریپت همانطوریکه گفته شد برای پاک کردن تعدادی از رکوردهای جدول تهیه کنید.
یک جاب در sql server ایجاد کنید که هر شب در ساعتی که کار با دیتابیس شما به حداقل می رسد این اسکریپت را اجرا کند.
بعد از چندروز یا چند هفته، بسته به تعداد رکوردهایی که هر شب پاک می کنید به هدفتون خواهید رسید.
ضمن اینکه می تونید رکوردهایی رو که می خواهید پاک کنید به جای پاک کردن به یک جدول دیگه برای آرشیو کردن انتقال بدهید با استفاده از SSIS ها.
SYNDROME
شنبه 22 دی 1386, 15:50 عصر
خوب عزیز من همین کم کم که میگی یعنی چطوری؟
در ادامه صحبتها دوستمان مثلا هر شب چنین کدی را اجرا کنی و تعداد رکوردها بستگی به نظر خودت دارد.
Delete from tbl_test where field1 in
(
select top 100 filed1 from tbl_test
)
موفق باشید
merlin_vista
شنبه 22 دی 1386, 20:35 عصر
اینجوری هم میشه همه رکورد ها را یه جا پاک کرد ! مگه نه !؟
DELETE FROM [Tabel]
بدون شرط همه را پاک میکنه !
fakhriamir
یک شنبه 23 دی 1386, 10:29 صبح
یه دستور توی اس کیو ال هست که جدولت هر چی بزرگ باشه ایکی ثانیه پاک می کنه
TRUNCATE TABLE name
حالشو ببر
SADAF
دوشنبه 24 دی 1386, 09:00 صبح
سلام دوست عزیز
شما می توانید مشکل خود را خیلی راحتر حل کنید. به اینصورت:
set rowcount 1000
delete tbl1
این دستور معادل
delete top 1000 from tbl1
عمل میکنه.
در ضمن برای اطلاع بیشتر sql2005 این امکان رو داره که روی چهار دستور insert ,delete,update,select از top استفاده کنی
mdrd
چهارشنبه 26 دی 1386, 10:16 صبح
Set RowCount 1000000 -- Any following SQL operations would affect only 1 Mil rows
declare RowsAffected as integer
RowsAffected = 1000000 -- Initiate so the loop will be successful first time
While (RowsAffected = 1000000) -- When the rowsaffected is less the 1 Mil, all rows are deleted
begin
begin tran
delete from table where condition
RowsAffected = @@rowcount
commit tran
end
موفق باشید
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.