powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Нумерация документов
25 сообщений из 41, страница 1 из 2
Нумерация документов
    #39654343
Васелина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как правильно правильно реализовать логику.

Есть документы. Номер документа увеличивается в зависимости от номера склада. У каждого склада своя нумерация документов.
...
Рейтинг: 0 / 0
Нумерация документов
    #39654348
Васелина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как правильнее использовать триггер, скалярную функцию или что то другое?
...
Рейтинг: 0 / 0
Нумерация документов
    #39654349
Васелина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
или хранимую процедуру
...
Рейтинг: 0 / 0
Нумерация документов
    #39654454
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВаселинаНомер документа увеличивается в зависимости от номера склада.
У номера документа есть префикс, зависящий от номера склада?
...
Рейтинг: 0 / 0
Нумерация документов
    #39654476
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Нумерация документов
    #39654610
Фотография SIMPLicity_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Нумерация документов
    #39654670
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SIMPLicity_iap https://social.technet.microsoft.com/wiki/ru-ru/contents/articles/10056.microsoft-sql-server.aspx

пи#дец, простите... Это восхищение или критика? :-)

Это экстремально лучший вариант, подходит, если при высоких требованиях к производительности и функциональности. Он при этом в общем простой и лаконичный, просто в статье разнесено на несколько частей, из за этого кажется большим. Единственный минус - используется CLR.

Конечно, если у ТС 10 пользователей, можно просто сделать таблицу счётчиков, и в процедуре или триггере присваивать новый номер.
...
Рейтинг: 0 / 0
Нумерация документов
    #39654718
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SIMPLicity_iap https://social.technet.microsoft.com/wiki/ru-ru/contents/articles/10056.microsoft-sql-server.aspx

пи#дец, простите... В многопользовательской среде вообще всё непросто...
...
Рейтинг: 0 / 0
Нумерация документов
    #39654743
d7i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно просто сделать таблицу счётчиков, и в процедуре или триггере присваивать новый номер.
Именно сделать таблицу счетчиков и в ТРИГГЕРЕ присваивать новый номер ПРИ СОЗДАНИИ НОВОГО ДОКУМЕНТА.

Я этот метод использую почти 20 лет и никаких проблем.
...
Рейтинг: 0 / 0
Нумерация документов
    #39654751
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d7i можно просто сделать таблицу счётчиков, и в процедуре или триггере присваивать новый номер.
Именно сделать таблицу счетчиков и в ТРИГГЕРЕ присваивать новый номер ПРИ СОЗДАНИИ НОВОГО ДОКУМЕНТА.

Я этот метод использую почти 20 лет и никаких проблем.
ох эти романтики... 20 лет ничему их жизнь не учит

ps капс это важность ваше подчёркивает?
...
Рейтинг: 0 / 0
Нумерация документов
    #39654752
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d7i можно просто сделать таблицу счётчиков, и в процедуре или триггере присваивать новый номер.
Именно сделать таблицу счетчиков и в ТРИГГЕРЕ присваивать новый номер ПРИ СОЗДАНИИ НОВОГО ДОКУМЕНТА.

Я этот метод использую почти 20 лет и никаких проблем.Я тоже. Но при этом я прекрасно понимаю, что это говнокод.
Потому что полюбому надо SELECTом получить текущий номер из таблицы, потом UPDATEом его изменить, да ещё в другую таблицу вставить.
Если не блокировать таблицы в монопольном режиме доступа, то рано или поздно возникнут накладки в нумерации.
Особенно если пользователей несколько сотен или тысяч.
В то же время такой уровень изоляции транзакции приведёт к катастрафическому падению производительности.
...
Рейтинг: 0 / 0
Нумерация документов
    #39654774
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapЕсли не блокировать таблицы в монопольном режиме доступа, то рано или поздно возникнут накладки в нумерации.Таблицы-то зачем? Достаточно строку в таблице, хранящей счетчики.
...
Рейтинг: 0 / 0
Нумерация документов
    #39654776
Фотография SIMPLicity_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник


PS Мне всегда хватало identity
PPS Для всего остального я мутил свои счётчики ... наверное я хреновый проектировщик
...
Рейтинг: 0 / 0
Нумерация документов
    #39654787
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SIMPLicity_,

identity не прикрутишь для разнородных номеров ака "Номер документа увеличивается в зависимости от номера склада"

а так да, таблица со складами, масками и последним значением, при добавление блокировать вычитку строки счётчика и увеличивать при успешном окончании или просто увеличивать и забить на стабильный +1(чаще всего требование ничем не аргументируется кроме как "хочу и всё тут") Из радостей - блокировка строки счётчика до окончания вставки вашего документа, или если отказаться от +1 то только на момент генерации номера, а всавилось или нет дело не обяхательное
...
Рейтинг: 0 / 0
Нумерация документов
    #39654795
Фотография SIMPLicity_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKSIMPLicity_,

identity не прикрутишь для разнородных номеров ака "Номер документа увеличивается в зависимости от номера склада"

а так да, таблица со складами, масками и последним значением, при добавление блокировать вычитку строки счётчика и увеличивать при успешном окончании или просто увеличивать и забить на стабильный +1(чаще всего требование ничем не аргументируется кроме как "хочу и всё тут") Из радостей - блокировка строки счётчика до окончания вставки вашего документа, или если отказаться от +1 то только на момент генерации номера, а всавилось или нет дело не обязательное

Да, наверное.

... и вариант invm (с отдельной таблицей) мне нравится больше... в силу снижения нагрузок. Особенно при распределённых системах.

Может быть, для этих случаев сиквенсы - "луч добра", но...
...
Рейтинг: 0 / 0
Нумерация документов
    #39654796
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SIMPLicity_TaPaKSIMPLicity_,

identity не прикрутишь для разнородных номеров ака "Номер документа увеличивается в зависимости от номера склада"

а так да, таблица со складами, масками и последним значением, при добавление блокировать вычитку строки счётчика и увеличивать при успешном окончании или просто увеличивать и забить на стабильный +1(чаще всего требование ничем не аргументируется кроме как "хочу и всё тут") Из радостей - блокировка строки счётчика до окончания вставки вашего документа, или если отказаться от +1 то только на момент генерации номера, а всавилось или нет дело не обязательное

Да, наверное.

... и вариант invm (с отдельной таблицей) мне нравится больше... в силу снижения нагрузок. Особенно при распределённых системах.

Может быть, для этих случаев сиквенсы - "луч добра", но...
ну в общем это и есть вариант с отдельной таблицей
...
Рейтинг: 0 / 0
Нумерация документов
    #39654808
Фотография SIMPLicity_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Васелинаили хранимую процедуру

Возвращаясь к теме.
Если добавление идёт через единственную хранимую процедуру,- то лучше (на мой взгляд) логику в ней реализовать. И избегать вставок "кроме как через неё".

Если добавляется абы как (где-то документы добавляются хранимкой, а где-то запросом от клиентского приложения) , - то будет лучше триггером. Это плохая практика, но сработает.

Жизнь можно облегчить грамотно сформировав индекс. Я бы, наверное, построил НЕкластерный индекс по склад - номер. Кластерный (такой же) был бы идеален, но на больших данных частых вставках, подозреваю, он будет слишком часто обновляться; а в том как работает механизм перестроения кластерного индекса я не сильно разбираюсь ...

Если я где-то не прав (по теме топика) - поправьте....
...
Рейтинг: 0 / 0
Нумерация документов
    #39654810
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SIMPLicity_,

авторЖизнь можно облегчить грамотно сформировав индекс. Я бы, наверное, построил НЕкластерный индекс по склад - номер. Кластерный (такой же) был бы идеален, но на больших данных частых вставках, подозреваю, он будет слишком часто обновляться; а в том как работает механизм перестроения кластерного индекса я не сильно разбираюсь ...

наша песня хороша, начинай сначала
...
Рейтинг: 0 / 0
Нумерация документов
    #39654866
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d7iЯ этот метод использую почти 20 лет и никаких проблем.Первое же нагруженное приложение - и проблемы будут.
...
Рейтинг: 0 / 0
Нумерация документов
    #39654877
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SIMPLicity_Я бы, наверное, построил НЕкластерный индекс по склад - номер. Кластерный (такой же) был бы идеален, но на больших данных частых вставках, подозреваю, он будет слишком часто обновляться; а в том как работает механизм перестроения кластерного индекса я не сильно разбираюсь ...

А как работает "механизм перестроения НЕкластерного индекса" вы разбираетесь?
НЕкластерный не нужно обновлять?
А после обновления НЕкластерного не нужно обновлять кластерный/кучу?
...
Рейтинг: 0 / 0
Нумерация документов
    #39654890
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попроектирую и я тоже...

1. Идентити - как главный номер и суррогатный ключ.
2. Строковое поле, куда можно вводить любой номер. Можно генерировать автоматом в процедуре (типа, нет номера - генерируем, причем совсем не обязательно в момент ввода документа - можно постобработкой) или вводить/менять ручками - как ужо сделаете.
...
Рейтинг: 0 / 0
Нумерация документов
    #39654896
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВаселинаКак правильнее использовать триггер, скалярную функцию или что то другое?
Правильнее всего использовать бумажный "журнал регистрации документов", который и будет выполнять задачу сериализации при генерации номеров. На каждом складе - свой.
...
Рейтинг: 0 / 0
Нумерация документов
    #39654918
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SIMPLicity_Если добавление идёт через единственную хранимую процедуру,- то лучше (на мой взгляд) логику в ней реализовать. И избегать вставок "кроме как через неё".Кто мешает запустить процедуру одновременно в десяти коннектах?invmiapЕсли не блокировать таблицы в монопольном режиме доступа, то рано или поздно возникнут накладки в нумерации.Таблицы-то зачем? Достаточно строку в таблице, хранящей счетчики.Какая разница, если в любом случае речь об общем ресурсе, к которому необходимо организовать последовательный доступ?
...
Рейтинг: 0 / 0
Нумерация документов
    #39654927
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapКакая разница, если в любом случае речь об общем ресурсе, к которому необходимо организовать последовательный доступ?Разница большая, - потому что общий ресурс не таблица, а строка этой таблицы.
...
Рейтинг: 0 / 0
Нумерация документов
    #39654931
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmiapКакая разница, если в любом случае речь об общем ресурсе, к которому необходимо организовать последовательный доступ?Разница большая, - потому что общий ресурс не таблица, а строка этой таблицы.Всё равно же надо ждать, пока он освободится!
...
Рейтинг: 0 / 0
25 сообщений из 41, страница 1 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Нумерация документов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]