PDA

View Full Version : پاک کردن رکورد های تکراری



5mmmmm
چهارشنبه 25 شهریور 1388, 12:40 عصر
من با استفاده از فایل های csv اطلاعات را بین بانک ها export و import می کنم.مشکل اینه که در بعضی مواقع رکورد تکراری وجود داره و دوحالت در اینجا پیش می یاد:
1-اگه من برای جدولم کلید تعیین کنم که اصلا اجازه ورود هیچ رکوردی را نمی ده.
2-اگه کلید نگذارم مشکل تکراری بودن رکوردها پیش می یاد.در اینصورت این رکوردهای تکراری را چجوری پاک کنم.

یه سوال دیگه اینکه استفاده از csv بهتره یا از xml استفاده کنم.اگه xml بهتره روش خروجی گرفته باهاش چیه؟

محمد سلیم آبادی
چهارشنبه 25 شهریور 1388, 12:46 عصر
1-اگه من برای جدولم کلید تعیین کنم که اصلا اجازه ورود هیچ رکوردی را نمی ده.
2-اگه کلید نگذارم مشکل تکراری بودن رکوردها پیش می یاد.در اینصورت این رکوردهای تکراری را چجوری پاک کنم.



کلید یکتای ترکیبی هم امتحان کرده اید؟ منظورم Composite Unique Key Constraint است.
http://www.barnamenevis.org/forum/showthread.php?t=179752

محمد سلیم آبادی
چهارشنبه 25 شهریور 1388, 12:54 عصر
پست قبلی را نادیده بگیرد،
برای حذف سطرهای تکراری از یک جدول:
http://www.simple-talk.com/sql/t-sql-programming/removing-duplicates-from-a-table-in-sql-server/

یک راه ساده این است که از group by تمام ستون هایتان استفاده کنید. سپس نتیجه را در یک جدول وقت ذخیره کرد و جدول اصلی را truncate table کنید سپس سطرهای جدول موقت را در جدول اصلی درج کنید.

5mmmmm
پنج شنبه 26 شهریور 1388, 12:51 عصر
ممنون
با distinct هم میشه رکوردهای غیر تکراری را پیدا کرد اونها را داخل جدول دیگه ریخت.ولی جدول اصلی را چکار کنم؟
truncate table??
به چه صورت انجام میشه؟

یه سوال دارم.bulk insert با فایل های xml هم کار میکنه؟

محمد سلیم آبادی
پنج شنبه 26 شهریور 1388, 13:01 عصر
ممنون
با distinct هم میشه رکوردهای غیر تکراری را پیدا کرد اونها را داخل جدول دیگه ریخت.ولی جدول اصلی را چکار کنم؟
truncate table??
به چه صورت انجام میشه؟

یه سوال دارم.bulk insert با فایل های xml هم کار میکنه؟

مهم نیست که با Distinct هم می شود این کار را کرد. در واقع distinct و group by برای خلاصه سازی اطلاعات مورد استفاده قرار می گیرند!



TRUNCATE TABLE table_name


در مورد bulk insert اطلاعات خوبی ندارم.

بهنام بهمنی
پنج شنبه 26 شهریور 1388, 13:15 عصر
در لينک زير به دنبال عبارت Bulk Exporting or Importing SQLXML Documents بگرديد و از انجا به بعد را مطالعه کنيد

http://msdn.microsoft.com/en-us/library/ms188365.aspx

ضمنا TRUNCATE TABLE دقيقا شبيه دستور delete بدون شرط است, اما داراي سرعت بالاتري نسبت به delete مي باشد.

http://msdn.microsoft.com/en-us/library/aa260621(SQL.80).aspx

محمد سلیم آبادی
پنج شنبه 26 شهریور 1388, 13:26 عصر
سرعت بالای حذف سطرها با کمک دستور TRUNCATE TABLE به دلیل داشتن حداقل عملیات LOG است.

5mmmmm
دوشنبه 30 شهریور 1388, 21:59 عصر
بعد از bulk insert یه علامت کاما در ستون آخر بعد از دیتا قرار میده.چون این کاما باعث ایجاد مشکل در ویرایش و حذف میشد بعد از bulk insert یکبار کل جدول ستون آخرش را ویرایش می کردم و این علامت , (کاما) را بر می دارم.راه بهتری نیست؟

اگر نیاز است تا کد export to csv را بگذارم.خودم نوشتمش!

5mmmmm
دوشنبه 30 شهریور 1388, 22:02 عصر
با اینکه دوستان راه حذف رکورد های تکراری را گفتند مسئله کلید به قوت خود باقیه!!!
من نمی تونم کلید را بر دارم و با وجود کلید برای bulk insert باید ابتدا کل سطرهای قدیمی را حذف کرد و بعد bulk insert کرد.آیا راهی هست با وجود کلید بشه رکورد تکراری وارد کرد؟

5mmmmm
دوشنبه 30 شهریور 1388, 22:05 عصر
فکر کنم یکی از راه ها ریختن bulk insert در یک جدول موقت بی کلید و سپس ریختن سطرهای جدول اصلی در همین جدول موقت،حذف رکوردهای تکراری و سپس ریختن داده های نهایی در جدول اصلی کلید دار می باشد!!!

این راه درسته و آیا راه دیگه ای هم هست؟