Страница 1 из 2
					
				Удалить записи из таблицы по  условию
				Добавлено: 17 ноя 2014, 11:02
				 rozum
				Добрый день всем!За ранее прошу прощения ,если такая тема уже обсуждалась,но... Подскажите пожалуйста как можно почистить(удалить данные из таблицы внешних атрибутов 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 тоже не отрабатывает( не видит ^ )
			 
			
					
				Re: Удалить записи из таблицы по  условию
				Добавлено: 17 ноя 2014, 12:33
				 edward_K
				1. Перед delete всегда проверяйте select - ом - есть ли что.
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
5. причем тут rebuild? у вас первасив? rebuild -у нужно указывать конкретный файл. где то в галке лежит батник для лечения таблиц(ы) - посмотрите.
   альтернатива - выгрузить все в dbf, переместить файл данных, загрузить из dbf. Ест. при этом никто не должен находиться в базе.
 
			
					
				Re: Удалить записи из таблицы по  условию
				Добавлено: 17 ноя 2014, 12:59
				 rozum
				да у нас pervasive. вычислять по одной записи это будет ну оочень долго((((((( может буду искать ещё какие варианты
записи 100% есть потому что select выгружает за 1 месяц 20.000 записей которые и нужно убрать но скопом всё удалять  нельзя поэтому и опираюсь на даты и подцепки((
			 
			
					
				Re: Удалить записи из таблицы по  условию
				Добавлено: 17 ноя 2014, 13:40
				 edward_K
				да ладно - можно и потерпеть. 20000 будет удалять минут 10 максимум. Вот если два ляма тогда другое дело.
			 
			
					
				Re: Удалить записи из таблицы по  условию
				Добавлено: 17 ноя 2014, 14:32
				 rozum
				так вот в том то и дело что за 2007  год это уже 250.000 а мне необходимо с 2007 по 2012 удалить.причем где то с 2008 года уже не один атрибут а 4 то есть это уже в 4 раза будет больше записей.
			 
			
					
				Re: Удалить записи из таблицы по  условию
				Добавлено: 17 ноя 2014, 17:26
				 Den
				прям именно sql-запросом ?
напишите простенький алгоритм на vip или fcom может...
			 
			
					
				Re: Удалить записи из таблицы по  условию
				Добавлено: 17 ноя 2014, 18:02
				 rozum
				я про это уже тоже подумала)) спасибо.Но все таки одну небольшую ошибочку нашла в запросе.)))) прописала не тот nrec 

 но думаю записать процедуру  придеться
 
			
					
				Re: Удалить записи из таблицы по  условию
				Добавлено: 19 ноя 2014, 10:20
				 Алексей
				сложные удаления тоже всегда на випе пишу...
			 
			
					
				Re: Удалить записи из таблицы по  условию
				Добавлено: 19 ноя 2014, 10:41
				 RAJAH
				Алексей писал(а):сложные удаления тоже всегда на випе пишу...
Тоже примажусь к обсуждению: а я на T-SQL.  

 
			
					
				Re: Удалить записи из таблицы по  условию
				Добавлено: 19 ноя 2014, 11:19
				 rozum
				подскажите ещё кто сталкивался! select у меня отрабатывает, но так как запрос непроиндексирован,  то записи выбираются ооочень долго, то есть поиск бежит по всем записям(а это 16млн)), после часа модификации, я прерываю процесс  

 ,и в итоге вижу,что вроде бы записи удаляются  достаточно хорошо а вот сам  размер таблицы не уменьшается.То есть либо у меня не хватает терпения дождаться полного окончания модификации ,либо ситуация такая, что записи якобы удаляются  а  на физическом уровне может просто ставятся, как помеченные на удаление.Пробую экспортнуть в dbf а затем импорт в базу.Или я не совсем понимаю как проходит удаление(((
 
			
					
				Re: Удалить записи из таблицы по  условию
				Добавлено: 19 ноя 2014, 15:06
				 edward_K
				читайте внимательно, что я вам писал, а не через слово. В промежутке между выгрузкой и загрузкой  надо физически удалить файл(переместить куда то).
или rebuild - все это делать когда никого нет в базе.
Первасив не умеет сжимать в каком то другом режиме файлы кроме rebuild-а. В MSSQL файлов всего 5 - и можно в фоне запустить их сжатие всех или нужный.
			 
			
					
				Re: Удалить записи из таблицы по  условию
				Добавлено: 19 ноя 2014, 18:44
				 rozum
				Sorry 

  догнала ,последую совету.Спасибо
 
			
					
				Re: Удалить записи из таблицы по  условию
				Добавлено: 20 ноя 2014, 14:19
				 rozum
				Простите уже опытные программисты новичка 

  но подскажите ещё плиз  по какому критерию можно разбить таблицу Atttrval  чтобы экспортировать её? Не поддерживает dbf  20Гб (или я ещё не умею правильно выгружать )  можно  ли  создать vip в котором описать какую то переменную присвоить ей 1 и в цикле прописать что выгружать с 1 например до 4 млн. записей.в итоге получиться где то 5 файлов dbf которые потом и можно импортировать обратно.Или есть какой нибудь критерий  отбора для выгрузки полегче?
Сразу прошу прощения и говорю спасибо)))
 
			
					
				Re: Удалить записи из таблицы по  условию
				Добавлено: 20 ноя 2014, 14:46
				 Den
				rozum писал(а):можно ли создать vip в котором описать какую то переменную присвоить ей 1 и в цикле прописать что выгружать с 1 например до 4 млн. записей.
можно
 
			
					
				Re: Удалить записи из таблицы по  условию
				Добавлено: 21 ноя 2014, 00:32
				 edward_K
				Тут проще по atl_lastdate резать. А с rebuild не разо брались?