Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Автоматическая последовательная нумерация
|
|||
|---|---|---|---|
|
#18+
Задача следующая: Имеется огромный чертёж с пронумерованными элементами-деталями (спецификацией). В процессе формирования чертежа нумерация деталей изменяется, но всегда сохраняется последовательность: от 1 с шагом 1. Для спецификации используется таблица TabSpec с полями: NomDetal int --Номер детали по спецификации на схеме; NameDetal VarChar --Наименование детали; С таблицей постоянно работают. Несколько деталей могут быть удалены - нумерация последующих должна поменяться. Например: было Код: plaintext 1. 2. 3. 4. 5. Получилось: Код: plaintext 1. 2. 3. Несколько деталей могут быть добавлены из соответствующего списка деталей после указанной позиции. Например: Добавлены подряд после "№2 Шатун": - Палец малый - Стопорное кольцо малое - Палец большой - Стопорное кольцо большое Получилось: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Несколько деталей могут быть перемещены после конкретного номера (или скопированы). Например: - Скопировать "№4 Стопорное кольцо малое" и "№6 Стопорное кольцо большое" два раза после п.1 Получилось: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. В дальнейшем поле NomDetal используется (например, для распечатки), и должно сохраняться в самой таблице. Пока пересчёт поля NomDetal реализую через курсоры: 1) В курсоре таблицу TabSpec сортирую по NomDetal по возрастанию. 2) Двигаюсь в курсоре от нужного минимального до нужного максимального номера NomDetal (чтобы ускорить работу, а то мог бы и с начала таблицы и до её конца. Часто, например, при удалении, удобно удалять "выделенными блоками", например, с 23 по 27, с 134 по 154 и т.п., в результате всё равно приходится пересчитывать почти всю нумерацию). 3) Отдельное поле TempNom каждой записи увеличиваю на 1: set @i=@i+1 update TabSpec TempNom = @i 4) После завершения курсора заношу новую нумерацию в поле NomDetal, чтобы уже в дальнейшем с ним и работать: update TabCpec NomDetal = TempNom Количество записей в спецификации не очень большое, до 1000. Имеется ли какой-нибудь способ более быстрого пересчёта нумерации? Может через временные таблицы как-то? ROW_NUMBER - пытался использовать, но не смог её результат записать в столбец NomDetal. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2018, 19:33 |
|
||
|
Автоматическая последовательная нумерация
|
|||
|---|---|---|---|
|
#18+
ИгорьНектоИмеется ли какой-нибудь способ более быстрого пересчёта нумерации? Может через временные таблицы как-то? ROW_NUMBER - пытался использовать, но не смог её результат записать в столбец NomDetal. покажите, как пытались заполнить NomDetal при помощи ROW_NUMBER ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2018, 20:01 |
|
||
|
Автоматическая последовательная нумерация
|
|||
|---|---|---|---|
|
#18+
ИгорьНектоROW_NUMBER - пытался использовать, но не смог её результат записать в столбец NomDetal. Код: sql 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2018, 20:06 |
|
||
|
Автоматическая последовательная нумерация
|
|||
|---|---|---|---|
|
#18+
Shakill, Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2018, 20:10 |
|
||
|
Автоматическая последовательная нумерация
|
|||
|---|---|---|---|
|
#18+
invm, Благодарю! Всё получилось! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2018, 20:25 |
|
||
|
Автоматическая последовательная нумерация
|
|||
|---|---|---|---|
|
#18+
ИгорьНекто, может вам стоит пересмотреть архитектуру ? к примеру, хранить данные в виде иерархии (связного списка - линейной "палки" от дерева): у каждого элемента, помимо ID, будет ещё и ParentID. Тогда перемещение элемента в списке, удаление или добавление - будет затрагивать минимум элементов, а нумерацию можно будет не хранить, а собирать "на лету" при помощи рекурсивного СТЕ в момент обращения к данным... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2018, 04:09 |
|
||
|
|

start [/forum/topic.php?fid=46&gotonew=1&tid=1689157]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
152ms |
get topic data: |
10ms |
get first new msg: |
5ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 246ms |
| total: | 492ms |

| 0 / 0 |
