|
Очистка РН за период средствами SQL | ☑ | ||
---|---|---|---|---|
0
trey1
04.04.19
✎
14:19
|
Всем привет! Ребят очень нужна ваша помощь. Как очистить таблицу РН до определенной даты? Мне нужно чтобы всё удалилось до определенной даты.
если общий запрос то я думаю так Connection.Execute("TRUNCATE TABLE "+имя РН как оно в скуле); |
|||
1
1Сергей
04.04.19
✎
14:20
|
Удаляет все строки в таблице или указанные секции таблицы, не записывая в журнал удаление отдельных строк. Инструкция TRUNCATE TABLE похожа на инструкцию DELETE без предложения WHERE, однако TRUNCATE TABLE выполняется быстрее и требует меньших ресурсов системы и журналов транзакций.
https://docs.microsoft.com/ru-ru/sql/t-sql/statements/truncate-table-transact-sql?view=sql-server-2017 |
|||
2
Cyberhawk
04.04.19
✎
14:22
|
Через 1С замерял за сколько удаляется? Или ты не 1Сник?
|
|||
3
bolobol
04.04.19
✎
14:24
|
Обновление итогов не забудьте!
|
|||
4
trey1
04.04.19
✎
14:25
|
(2) 1Сник, записей больше 100 миллионов, после полдня просиживания решил что это прям не самый лучший вариант
|
|||
5
Ёпрст
04.04.19
✎
14:25
|
(0) неправильно думаешь
|
|||
6
trey1
04.04.19
✎
14:27
|
(5) Как правильно? Поэтому и спрашиваю
|
|||
7
trey1
04.04.19
✎
14:28
|
(3) После того как снесу в ыйд? чтобы данные в ВТ появились видимо?
|
|||
8
Ёпрст
04.04.19
✎
14:28
|
(6) как минимум, delete + where
а так, на нимфостарте полно поделок по удалению всего и вся средстами sqlготовых |
|||
9
trey1
04.04.19
✎
14:31
|
(8) я видел, если даже разработка стоит 1стартмани эт надо абонемент купить минимум за 4500, эт как бы дофига, учитывая что мне нужно то только одна обработка
|
|||
10
Ёпрст
04.04.19
✎
14:33
|
(9) ищи их -же, на других ресурсах.
|
|||
11
Робинзон Крузо
04.04.19
✎
14:34
|
Грохнуть регистр в метаданных. Выгрузить загрузить через .dt. Восстановить необходимый период из копии с помощью КД 2.0
|
|||
12
Ёпрст
04.04.19
✎
14:47
|
ну вот, первая же ссылка в поиске.. внизу статьи пример
https://habr.com/ru/post/264687/ |
|||
13
timurhv
04.04.19
✎
16:56
|
(6)
- Создать таблицу с префиксом запросом SQL; - Скопировать записи из старой таблицы в новую с отбором по периоду; - Грохнуть старую таблицу; - Переименовать новую таблицу; |
|||
14
timurhv
04.04.19
✎
16:57
|
(12)
---------------- командаРегистров.CommandText = командаРегистров.CommandText + "DELETE FROM " + ОсновнаяТаблицаРегистра + " WHERE _RecorderRRef IN (SELECT _IDRRef FROM " + строкаТаблицы.ИмяТаблицыХранения + " WHERE _Date_Time BETWEEN @StartDate AND @EndDate);"; ---------------- Это долгая операция, если нужно удалить данные допустим за 10 лет и сформировать остатки на начало 2019 года. |
|||
15
ptiz
04.04.19
✎
17:01
|
Я так чищу, потом только итоги пересчитать:
// создаем копию таблицы Команда = "SELECT * INTO " + ИмяВремТаблицы + " FROM " + ИмяТаблицы + "WHERE " + ИмяПоляПериода + " > " + ДатаСтрокойВSQL(КонецДня(Дата2)); ВыполнитьКомандуSQL(Команда); // чистим текущую таблицу Команда = "TRUNCATE TABLE " + ИмяТаблицы; ВыполнитьКомандуSQL(Команда); // возвращаем данные из копии таблицы Команда = "INSERT INTO " + ИмяТаблицы + " SELECT * FROM " + ИмяВремТаблицы; ВыполнитьКомандуSQL(Команда); // удаляем временную таблицу Команда = "DROP TABLE " + ИмяВремТаблицы; ВыполнитьКомандуSQL(Команда); |
|||
16
timurhv
04.04.19
✎
17:08
|
(15) Можно еще дополнить условие, которое оставит движения документов определенных, например корректировки данных.
|
|||
17
bolero
04.04.19
✎
17:12
|
(14) > WHERE _RecorderRRef IN (SELECT
поубивав бы
|
|||
18
bolero
04.04.19
✎
17:17
|
(17) подробнее: DELETE WHERE IN (SELECT) - по каждой строчке очищаемой страницы будет производиться сравнение, входит ли значение в колонке в список из 100500 (или 100500800) отобранных другим запросом значений, и время исполнения запроса возрастает в гиперболической зависимости от объема данных
DELETE USING (SELECT) WHERE - аналог JOIN для DELETE - внутрях сначала обычным SELECT JOIN быстро отбирается список строк к удалению, и за один проход удаляется |
|||
19
rsv
04.04.19
✎
17:26
|
(18) вывод все равно один ...delete пишет в лог .. Truncate нет
|
|||
20
bolero
04.04.19
✎
17:40
|
(19) чего-то я этот вывод пропустил, видимо топик невнимательно читал...
TRUNCATE коротенько пишет в WAL одну операцию "поделить на ноль вон ту таблицу", на реплику эта операция передается быстро, и исполняется там также быстро а DELETE - да, подробно перечисляет, что именно удалять, и кусок журнала может получиться увесистым частичного TRUNCATE не существует ТС изначально запрашивал "почистить регистр до определенной даты", это можно сделать
я пока не видел, чтобы в РН и регистраторе даты различались, поэтому брать дату из регистратора смысла не вижу а если более подробный отбор по регистраторам - то схема из (17) |
|||
21
Immortal
04.04.19
✎
19:00
|
И таблицу итогов не забудьте
|
|||
22
trey1
05.04.19
✎
06:12
|
О ребят спасибо большое всем за помощь и наводки, сейчас буду разбираться!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |