Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 как удалить строки с идентичными полями из таблицы  [new]
alexle
Member

Откуда:
Сообщений: 1
Есть проблема с одинаковыми полями в строке
применил скрипт


Declare @cnt_del int --количество удаляемых строк
Declare @abs_num_sens int,@time_kp datetime -- список уникальных полей таблицы из которой удаляем

while 1=1
BEGIN
Select top 1 @abs_num_sens=abs_num_sens,@time_kp=time_kp,@cnt_del=count(*)-1 from arh_i group by abs_num_sens,time_kp having count(*)>1
if @@RowCount>0
begin
Set RowCount @Cnt_Del
delete from arh_i where @abs_num_sens=abs_num_sens and @time_kp=time_kp
Set RowCount 0
end
else
Break
END

select * from arh_i

видно что работает но очень уж медленно
как бы его оптимизировать
в таблице порядка 2 000 000 записей
помогите пожалста
1 июл 04, 14:12    [777469]     Ответить | Цитировать Сообщить модератору
 Re: как удалить строки с идентичными полями из таблицы  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Поиск
1 июл 04, 14:19    [777514]     Ответить | Цитировать Сообщить модератору
 Re: как удалить строки с идентичными полями из таблицы  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Можно слить все уникальные строки в аналогичную таблицу, дропнуть источник, а новую переименовать в исходную.
1 июл 04, 14:20    [777527]     Ответить | Цитировать Сообщить модератору
 Re: как удалить строки с идентичными полями из таблицы  [new]
KOLCHOZ_POSTEVENT
Guest
Мне Ваше решение понравилось.
Смастырь левую таблу аналогичной структуры.
По проблемным полям делаешь юник индекс with IGNORE_DUP_KEY.
Заливаешь эту таблу из исходной,все даблы отлетают автоматически,опусташаешь исходную таблу и переливаешь данные из левой.
На боевую таблу вешаешь индекс with IGNORE_DUP_KEY для охраны от даблов.
1 июл 04, 14:34    [777592]     Ответить | Цитировать Сообщить модератору
 Re: как удалить строки с идентичными полями из таблицы  [new]
Палестинец
Member

Откуда:
Сообщений: 8314
предполагаю наличие id - уникального ключа..

delete from arh_i 
from arg_i join 
arh_i a2 on 
(arg_i.abs_num_sens=a2.abs_num_sens 
and arg_i.time_kp=a2.time_kp
and arg_i.id>a2.id) 
1 июл 04, 15:58    [778004]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить