ورود

View Full Version : حذف رکورد تکراری و backup



ali_abbasi22145
یک شنبه 27 آذر 1384, 13:51 عصر
سلام دوستان عزیز

من برنامه ای در دلفی 7 و SQL Server 2000 با ارتباط ADO دارم.
و EXE برنامه را در هر یک از کامپیوترهای کلاینت نصب کرده ام و هرکدام به
بانک SQL Server واقع دریک Windows 2000 Server وصل شده و کار می کنند و می خواهم:

1-من یکسری اطلاعات به بانک import کردم ( ازimport خودSQL Server ) که چندین رکورد حدودا بیش از 15000 انها تکراری است چون توی بانک اصلی EXCEL من تکراری بود حال تکراری ها را چگونه حذف کنم.
و اصولا هنگام importبوسیله SQL Server روشی برای اینکه چک کردن اگر تکرای بود نگیرد وجود دارد.

2-دستورالملی در دلفی که کاربر بتواند از طریق کامپیوترهای کلاینت از بانک Backup بگیرد( آقای کشاوز مثل اینکه راه حلی داشت).

AminSobati
یک شنبه 27 آذر 1384, 21:20 عصر
دوست عزیزم،
حذف رکوردهای تکراری راه حل ساده ای نداره اما چندین روش موجوده.
مثلا میشه SELECT INTO انجام بدین و همزمان DISTINCT هم بکنین تا جدول جدیدی ایجاد بشه از رکوردهای غیر تکراری. بعد جدول قبلی رو حذف کنین تا جدول جدید جایگزین اون بشه.

ali_abbasi22145
دوشنبه 28 آذر 1384, 11:11 صبح
سلام

1-متشکر اما یک مقدار توضیح بیشتر بدهید.
2-من بانکم را از Excel با خود sql بوسیله import وارد بانک کردم اگر روشی هم باشد که در همان Excel تکراری
را حذف کنم برایم راحتتر و بهتر است بعد بانک بدون تکرار را وارد sql کنم.

AminSobati
دوشنبه 28 آذر 1384, 17:51 عصر
SELECT DISTINCT * INTO NewTable FROM MainTable
GO
SELECT * FROM NewTable

ali_abbasi22145
شنبه 01 دی 1386, 15:42 عصر
سلام
من می خواهم که رکوردهایی که فیلد employee_number آنها تکراری است حذف شود.
در ضمن دستورات برحسب چه فیلدی جدول را Unique می کنند.

MShirzadi
شنبه 01 دی 1386, 18:12 عصر
در ضمن دستورات برحسب چه فیلدی جدول را Unique می کنند.بر حسب تمام فیلد هایی که شما دارید در Select نام می برید که در این دستور آقای ثباتی


SELECT DISTINCT * INTO NewTable FROM MainTableبر طبق تمام فیلد های Table آن را Unique می کند
اما یک سئوال که داشتم این است که شما می خواهی رکورد هایی که فیلد employee_number آنها یکی است حذف شود و این یعنی اطلاعات دیگر فیلد ها با هم یکی است یا اینکه برات فقط یکیش مهم است
یعنی داریم


employee_number= 100
name = 'Mohammad'

و


employee_number=100
Name = 'ali'

از این دوتا هر کودومش بمونه مهم نیست دیگه

MShirzadi
شنبه 01 دی 1386, 19:00 عصر
اگر شما منظورتون این بود که من در تاپیک قبلی گفتم می تونی به این روش مشکلت حل بشه اما اگر چیز دیگه ای منظورت هست بگو تا ببینم می تونم بنویسم یا نه.
شما باید یه فیلد از نوع AutoNumber داشته باشی و اسم اون ID باشه بعد اگر Query زیر را اجرا کردی اون چیزی که می خوای برات درست میشه


Declare @T_ID Table(ID int)
,@T_employee_number Table(ID int)
Declare @id int
Declare C Cursor For Select Distinct employee_number From Tbl_Name
Open C
Fetch C into @id
While(@@Fetch_Status=0)
Begin
insert into @T_employee_number (id)values (@id)
Select @id=MAX(ID) From Tbl_Name Where employee_number = @ID
insert into @T_ID (id)values (@id)
Fetch Next From C into @id
End
Deallocate C
Delete From Tbl_Name Where ID Not in (Select * From @T_ID) And employee_number in (Select * From @T_employee_number)

ali_abbasi22145
یک شنبه 02 دی 1386, 09:31 صبح
سلام
1-
employee_number= 100
name = 'Mohammad'
و
employee_number=100
Name = 'ali
برای من از این دوتا هر کودومش بمونه مهم نیست.

2-
من جدولم یک Autonumber دارد به اسم sicard و در نتیجه هیچ وقت دو رکورد تمام فیلدهایشان یکی نمی شوند (دو رکورد تمام فیلدهایشان یکی به غیر از sicard می تواند باشد).

پس با این شکل می خواهم جدول برحسب رکوردهایی که فیلد employee_number آنها تکراریست ، حذف شود (Uniqueگردد) .

MShirzadi
یک شنبه 02 دی 1386, 09:52 صبح
خوب دوست عزیز این کدی که من برات گذاشتم رو تست می کردی بهت حواب می ده من ائن رئ تست کردم
ولی خوب کد زیر رو هم یکی از دوستان در تاپیک دیگری گفت که به نظر من بهتر است


Delete From TblA Where sicard Not in (Select Min(sicard) From TblA Group by employee_Number))

ali_abbasi22145
یک شنبه 02 دی 1386, 11:12 صبح
---------- Delete repeat employee_Number ---------------
Delete From CardTable Where sicard Not in (Select Min(sicard) From CardTable Group by employee_Number)

سلام
این دستور به خوبی کار می کند و خود دستور را خوب نفهمیدم!
حال بخواهیم سورت صعودی هم برحسب employee_Number بکند هم بفرمایید متشکر می شوم.

MShirzadi
یک شنبه 02 دی 1386, 12:27 عصر
متوجه نمی شم کجا می خوای Sort کنی ؟؟