|
![]() |
#1 |
Участник
|
Нет никакой разницы между delete from table на SQL и rec.deleteall(false) в Наве.
|
|
![]() |
#2 |
Участник
|
Цитата:
Какая-та опция должна быть, которая сбросила бы историю удаления. Пробовала следующий оператор, но, увы, и он не сработал: В цикле: 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); |
|
![]() |
#3 |
Участник
|
Цитата:
Цитата:
Касаемо deleteall(false) в Наве и delete from table на SQL - скорость выполнения в один момент времени абсолютно одинаковая, код Нава транслируется в приведенный код SQL. Возможно Вам стоит подучить матчасть прежде чем лезть грудью на амбразуру, подумайте о тех несчастных, что будут после Вас поддерживать код. |
|
![]() |
#4 |
Участник
|
Цитата:
Сообщение от helga7289
![]() Цитата:
Какая-та опция должна быть, которая сбросила бы историю удаления. Пробовала следующий оператор, но, увы, и он не сработал: В цикле: 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. По крайней мере тот код, который вы в качестве примера привели в постах. |
|
![]() |
#5 |
Участник
|
<<зачем вы используете TABLOCK при удалении из таблицы? По-моему это просто бессмысленно.>>
Без этой опции отчет блокирует сам себя! Спасибо всем, кому не безразлично оказалась моя проблема. Отбросила идею удаления буферного файла через SQL. Отчет переделала. Теперь вместо 6 часов выполняется 2 часа. Построила 2 Аналитических Отчета и вместо Фин.Книги операций работаю с данными Аналитических Отчетов. |
|