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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 13.05.2014, 17:09   #17  
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. По крайней мере тот код, который вы в качестве примера привели в постах.
 


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

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

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