AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.05.2014, 19:00   #1  
rmv is offline
rmv
Участник
 
481 / 11 (1) +
Регистрация: 15.02.2005
Нет никакой разницы между delete from table на SQL и rec.deleteall(false) в Наве.
Старый 12.05.2014, 22:09   #2  
ОльгаМ is offline
ОльгаМ
Участник
 
36 / 10 (1) +
Регистрация: 07.09.2004
Адрес: Москва
Цитата:
Сообщение от rmv Посмотреть сообщение
Нет никакой разницы между delete from table на SQL и rec.deleteall(false) в Наве.
В SQL быстрее отрабатывает, но лучше использовать truncate.
Какая-та опция должна быть, которая сбросила бы историю удаления.
Пробовала следующий оператор, но, увы, и он не сработал:

В цикле:

ConnectSQL();
_TableName := STRSUBSTNO('[dbo].[%1', COMPANYNAME) + '$Debts Forma 5 Buffer]';
strSQL := STRSUBSTNO('USE [%1]; SET LOCK_TIMEOUT -1;',DatabaseName);
strSQL += 'declare @str varchar(4000)';
strSQL += ' set @str = ''TRUNCATE TABLE with(TABLOCK) ''+' +'''' + _TableName+ ''''+ '' +
'+ '' DBCC CHECKIDENT (''+' +'''' + _TableName+ ''''+ '+'', RESEED,1);''' + ' exec (@str)'

MESSAGE('%1_begin',DebtsBuffer.COUNT);
adocon.Execute(strSQL);
MESSAGE('%1_end',DebtsBuffer.COUNT);
adocon.Close;
adocon.Cancel; // всё, что есть, всё использовала, чтобы сбросить adocon.Open.
CLEAR(adocon);
Старый 13.05.2014, 11:11   #3  
rmv is offline
rmv
Участник
 
481 / 11 (1) +
Регистрация: 15.02.2005
Цитата:
Сообщение от helga7289 Посмотреть сообщение
Сейчас работает около 6 часов. Excel файл небольшой, но почти все ячейки собираются из фин.книги по своему алгоритму.
Так может проблему 6 часов решать а не чистить гигантский буфер?
Цитата:
Сообщение от helga7289 Посмотреть сообщение
В SQL быстрее отрабатывает, но лучше использовать truncate.
Какая-та опция должна быть, которая сбросила бы историю удаления.
Пробовала следующий оператор, но, увы, и он не сработал:
Про truncate это сарказм был. Почитайте про права, требуемые для truncate.
Касаемо deleteall(false) в Наве и delete from table на SQL - скорость выполнения в один момент времени абсолютно одинаковая, код Нава транслируется в приведенный код SQL.
Возможно Вам стоит подучить матчасть прежде чем лезть грудью на амбразуру, подумайте о тех несчастных, что будут после Вас поддерживать код.
Старый 13.05.2014, 17:09   #4  
AnDr is offline
AnDr
Участник
 
6 / 10 (1) +
Регистрация: 06.02.2006
Цитата:
Сообщение от helga7289 Посмотреть сообщение
Цитата:
Сообщение от rmv Посмотреть сообщение
Нет никакой разницы между delete from table на SQL и rec.deleteall(false) в Наве.
В SQL быстрее отрабатывает, но лучше использовать truncate.
Какая-та опция должна быть, которая сбросила бы историю удаления.
Пробовала следующий оператор, но, увы, и он не сработал:

В цикле:

ConnectSQL();
_TableName := STRSUBSTNO('[dbo].[%1', COMPANYNAME) + '$Debts Forma 5 Buffer]';
strSQL := STRSUBSTNO('USE [%1]; SET LOCK_TIMEOUT -1;',DatabaseName);
strSQL += 'declare @str varchar(4000)';
strSQL += ' set @str = ''TRUNCATE TABLE with(TABLOCK) ''+' +'''' + _TableName+ ''''+ '' +
'+ '' DBCC CHECKIDENT (''+' +'''' + _TableName+ ''''+ '+'', RESEED,1);''' + ' exec (@str)'

MESSAGE('%1_begin',DebtsBuffer.COUNT);
adocon.Execute(strSQL);
MESSAGE('%1_end',DebtsBuffer.COUNT);
adocon.Close;
adocon.Cancel; // всё, что есть, всё использовала, чтобы сбросить adocon.Open.
CLEAR(adocon);

А есть понимание того, чем отличается и почему TRUNCATE TABLE отрабатывает быстрее DELETE? />/>/>

Вы раскладывали свой запрос (то, что получается в переменной strSQL) в студии SQL? В каком-то из предыдущих постов вам советовали это сделать. Если бы вы это сделали часть вопрос снялся бы сама собой.

1.В инструкции TRUNCATE TABLE не используется никаких хинтов, типа WITH (хинт)! Синтаксис truncate'a очень примитивный. Если вы напишите подобный sql код в студии SQL у вас полезут ошибки.

2. В инструкции DELETE, которая в первом посте - тоже самое! Подсказка (hint), если мне изменяет память, пишется после слова FROM, но никак не перед ним!

3. С плюсиками ('+') в запросе, вы тоже что-то "нахимичили", по-моему. Опять же если ваш запрос попытаться выполнить в студии - получится примерно такая вещь - DELETE (хинт!!!) FROM + (лишний плюсик) [Debts Forma 5 Buffer].

4. Мне кажется вообще не нужно заморачиватся с динамическим запросом. Разложите задачу на подзадачи, код сразу станет понятней и будет ясно где и что искать

И еще такой вопрос - зачем вы используете TABLOCK при удалении из таблицы? По-моему это просто бессмысленно.

Из этого делаю простой вывод - код на sql не отработает ни разу! Не то, что на второй раз...

P.S. По крайней мере тот код, который вы в качестве примера привели в постах.
Старый 14.05.2014, 14:58   #5  
ОльгаМ is offline
ОльгаМ
Участник
 
36 / 10 (1) +
Регистрация: 07.09.2004
Адрес: Москва
<<зачем вы используете TABLOCK при удалении из таблицы? По-моему это просто бессмысленно.>>
Без этой опции отчет блокирует сам себя!

Спасибо всем, кому не безразлично оказалась моя проблема.
Отбросила идею удаления буферного файла через SQL.
Отчет переделала. Теперь вместо 6 часов выполняется 2 часа.
Построила 2 Аналитических Отчета и вместо Фин.Книги операций работаю с данными Аналитических Отчетов.
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 18:49.