Удалить записи из таблицы по условию
Модераторы: m0p3e, edward_K, Модераторы
Удалить записи из таблицы по условию
Добрый день всем!За ранее прошу прощения ,если такая тема уже обсуждалась,но... Подскажите пожалуйста как можно почистить(удалить данные из таблицы внешних атрибутов Attrval) за определенный период и с условием .Пробую вот таким образом и в итоге окно модификации данных крутит но данные не удаляет ,а почистить необходимо,сама таблица attrval уже 21гб.
DELETE attrval
where
((
word(1104) /== AttrVal.wtable
and comp(000100000000000Dh) /== AttrVal.cAttrNam
and AttrVal.crec /== Spstep.nrec
and spstep.cstepdoc /== stepdoc.nrec
and stepdoc.cbasedoc /== basedoc.nrec
and date(30,01,2007) <<= basedoc.ddoc (NoIndex)
and date(31,12,2007) >>= basedoc.ddoc (NoIndex)
))
;
Может быть я синтаксис не так пишу.Через rebuild тоже не отрабатывает( не видит ^ )
DELETE attrval
where
((
word(1104) /== AttrVal.wtable
and comp(000100000000000Dh) /== AttrVal.cAttrNam
and AttrVal.crec /== Spstep.nrec
and spstep.cstepdoc /== stepdoc.nrec
and stepdoc.cbasedoc /== basedoc.nrec
and date(30,01,2007) <<= basedoc.ddoc (NoIndex)
and date(31,12,2007) >>= basedoc.ddoc (NoIndex)
))
;
Может быть я синтаксис не так пишу.Через rebuild тоже не отрабатывает( не видит ^ )
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: Удалить записи из таблицы по условию
1. Перед delete всегда проверяйте select - ом - есть ли что.
2. delete на таких сложных условиях на ранних версиях мог отработать не корректно(в обе стороны - как не доудалить, так и удалить все).
3. Удаляемая таблица должна быть главной, но здесь вы это выполняете.
4. Универсальное средство сделать выгрузку в txt запросов на удаление одной записи и потом выполнить файло в сапорте. медленно, но зато надежно
5. причем тут rebuild? у вас первасив? rebuild -у нужно указывать конкретный файл. где то в галке лежит батник для лечения таблиц(ы) - посмотрите.
альтернатива - выгрузить все в dbf, переместить файл данных, загрузить из dbf. Ест. при этом никто не должен находиться в базе.
2. delete на таких сложных условиях на ранних версиях мог отработать не корректно(в обе стороны - как не доудалить, так и удалить все).
3. Удаляемая таблица должна быть главной, но здесь вы это выполняете.
4. Универсальное средство сделать выгрузку в txt запросов на удаление одной записи и потом выполнить файло в сапорте. медленно, но зато надежно
Код: Выделить всё
select 'delete attrval where (('+string(attrval.nrec)+' == nrec ));'
...
to txt c:\1\attrval_del.txt
;
#include c:\1\attrval_del.txt
альтернатива - выгрузить все в dbf, переместить файл данных, загрузить из dbf. Ест. при этом никто не должен находиться в базе.
Re: Удалить записи из таблицы по условию
да у нас pervasive. вычислять по одной записи это будет ну оочень долго((((((( может буду искать ещё какие варианты
записи 100% есть потому что select выгружает за 1 месяц 20.000 записей которые и нужно убрать но скопом всё удалять нельзя поэтому и опираюсь на даты и подцепки((
записи 100% есть потому что select выгружает за 1 месяц 20.000 записей которые и нужно убрать но скопом всё удалять нельзя поэтому и опираюсь на даты и подцепки((
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: Удалить записи из таблицы по условию
да ладно - можно и потерпеть. 20000 будет удалять минут 10 максимум. Вот если два ляма тогда другое дело.
Re: Удалить записи из таблицы по условию
так вот в том то и дело что за 2007 год это уже 250.000 а мне необходимо с 2007 по 2012 удалить.причем где то с 2008 года уже не один атрибут а 4 то есть это уже в 4 раза будет больше записей.
-
- Местный житель
- Сообщения: 1844
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: Удалить записи из таблицы по условию
прям именно sql-запросом ?
напишите простенький алгоритм на vip или fcom может...
напишите простенький алгоритм на vip или fcom может...
Re: Удалить записи из таблицы по условию
я про это уже тоже подумала)) спасибо.Но все таки одну небольшую ошибочку нашла в запросе.)))) прописала не тот nrec но думаю записать процедуру придеться
-
- Местный житель
- Сообщения: 2896
- Зарегистрирован: 24 июн 2005, 12:12
- Откуда: Иркутская область
Re: Удалить записи из таблицы по условию
сложные удаления тоже всегда на випе пишу...
Re: Удалить записи из таблицы по условию
Тоже примажусь к обсуждению: а я на T-SQL.Алексей писал(а):сложные удаления тоже всегда на випе пишу...
Re: Удалить записи из таблицы по условию
подскажите ещё кто сталкивался! select у меня отрабатывает, но так как запрос непроиндексирован, то записи выбираются ооочень долго, то есть поиск бежит по всем записям(а это 16млн)), после часа модификации, я прерываю процесс ,и в итоге вижу,что вроде бы записи удаляются достаточно хорошо а вот сам размер таблицы не уменьшается.То есть либо у меня не хватает терпения дождаться полного окончания модификации ,либо ситуация такая, что записи якобы удаляются а на физическом уровне может просто ставятся, как помеченные на удаление.Пробую экспортнуть в dbf а затем импорт в базу.Или я не совсем понимаю как проходит удаление(((
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: Удалить записи из таблицы по условию
читайте внимательно, что я вам писал, а не через слово. В промежутке между выгрузкой и загрузкой надо физически удалить файл(переместить куда то).
или rebuild - все это делать когда никого нет в базе.
Первасив не умеет сжимать в каком то другом режиме файлы кроме rebuild-а. В MSSQL файлов всего 5 - и можно в фоне запустить их сжатие всех или нужный.
или rebuild - все это делать когда никого нет в базе.
Первасив не умеет сжимать в каком то другом режиме файлы кроме rebuild-а. В MSSQL файлов всего 5 - и можно в фоне запустить их сжатие всех или нужный.
Re: Удалить записи из таблицы по условию
Sorry догнала ,последую совету.Спасибо
Re: Удалить записи из таблицы по условию
Простите уже опытные программисты новичка но подскажите ещё плиз по какому критерию можно разбить таблицу Atttrval чтобы экспортировать её? Не поддерживает dbf 20Гб (или я ещё не умею правильно выгружать ) можно ли создать vip в котором описать какую то переменную присвоить ей 1 и в цикле прописать что выгружать с 1 например до 4 млн. записей.в итоге получиться где то 5 файлов dbf которые потом и можно импортировать обратно.Или есть какой нибудь критерий отбора для выгрузки полегче?
Сразу прошу прощения и говорю спасибо)))
Сразу прошу прощения и говорю спасибо)))
-
- Местный житель
- Сообщения: 1844
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: Удалить записи из таблицы по условию
можноrozum писал(а):можно ли создать vip в котором описать какую то переменную присвоить ей 1 и в цикле прописать что выгружать с 1 например до 4 млн. записей.
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: Удалить записи из таблицы по условию
Тут проще по atl_lastdate резать. А с rebuild не разо брались?