Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Автоинкремент своими руками [MSSQL2000]


Страницы:   1 2

Term ©   (2004-11-18 10:23:00) 

Значит проблема такая нужно автоинкремент заполнять определённым обпразом скажем чтобы генерились значения типа 1.1, 1.2 и т.д. 1. -префикс для всей базы, использую MSSQL2000, есть в данной СУБД генераторы такие или набодобие как в FB. чтобы из них получить уникальное значение а скажем в тригере слепить нужное значение и вставить в поле???


vuk   (2004-11-18 16:12:00) [1]

to Nikolay M. ©   (18.11.04 16:08) [38]:
Что интересовало - это я понял. Просто как вариант привел примеры из жизни. Не придумал.


Nikolay M.   (2004-11-18 16:08:00) [2]


> vuk ©   (18.11.04 15:46) [37]

Таких ситуаций я и сам могу придумать с десяток, меня интересовало, что конкретно происходит у автора :)


> Ega23 ©   (18.11.04 15:40) [36]

Ты все-таки не вытерпел :)))


vuk   (2004-11-18 15:46:00) [3]

to Nikolay M. © (18.11.04 15:37) [34]:
>просто интересовали причины "против".
Основная причина против - если идентификаторы используются не только для внутренних связей данных, а например являются артикулами товаров (кодами заказов, продаж и т.п.), то, я думаю, понятно, что короткими идентификаторами оперировать проще, чем длинными. Но если разбивать идентификаторы на диапазоны по подразделениям и пытаться уйти от пересечений диапазонов, то длинных идентификаторов избежать вряд ли удасться.


Ega23   (2004-11-18 15:40:00) [4]

Неправильно ты понял. Читай про SET IDENTITY_INSERT


Term   (2004-11-18 15:38:00) [5]


> противоестественным" способом можно и автоинкремент изменить,
> читайте BOL. (в который раз? ;о))

я это тоже читал там есть свои грабли, как я понял после этого меняется значение которое он выдаст при следующей вставке. Т.Е. если было 1000 я его поменял на 2000 то след будет 2001, я так понял


Nikolay M.   (2004-11-18 15:37:00) [6]


> vuk ©   (18.11.04 14:46) [31]
> Можно, но диапазоны должны быть достаточно широкими, чтобы
> исключить пересечения. Иной раз это не очень удобно.

Я отнюдь не навязыавл этот способ, просто интересовали причины "против".


> Term   (18.11.04 14:47) [32]
> нет это противоестественно :)))

А изменять твои "1.2" - это более "естественно"?


sniknik   (2004-11-18 15:26:00) [7]

"противоестественным" способом можно и автоинкремент изменить, читайте BOL. (в который раз? ;о))


Term   (2004-11-18 14:47:00) [8]


> Это твое очередное "естественно"?

нет это противоестественно :))) но требуется


vuk   (2004-11-18 14:46:00) [9]

to Nikolay M. ©  (18.11.04 13:05) [27]:
>Я не пойму, что мешает разделить все значения int на несколько
>диапазонов и на каждом сервере генерить автоинкремент только в
>пределах позволенного ему диапазона?
Можно, но диапазоны должны быть достаточно широкими, чтобы исключить пересечения. Иной раз это не очень удобно.

to sniknik ©   (18.11.04 13:38) [28]:
>а дополнительное поле с номером подразделения кто мешает
>завести?
А одно другого не исключает. Просто при наличии составного ключа менее удобно делать ссылки при построении FK. То есть наличие естественного ключа не исключает удобства наличия искусственного.


Nikolay M.   (2004-11-18 14:17:00) [10]


> на основе identity не годиться, т.к. идентити нельзя править

Это твое очередное "естественно"? Может, БОЛ почитать?


> а дополнительное поле с номером подразделения кто мешает
> завести?

Или так, собственно, не суть важно. Похоже, автор дейстувет по принципу: нам чужие велосипеды не нужны - мы свой придумаем...


Term   (2004-11-18 14:01:00) [11]


> а дополнительное поле с номером подразделения кто мешает
> завести? это все предлагалось, но вместо принятия логичного/и
> обсуждения конкретного, вылезли выводы по каким то ХП ([25]),
> а логичное упорно игнорируется.

ничего не игнорируется,

> Правда есть одна тонкость - у нас вся работа с данными ведется
> через хранимые процедуры и клиенты не имеют прямого доступа
> к таблицам. Поэтому все операции с данными находятся под
> контролем.

отсюда взялись ХП.

а просто смастерить на основе identity не годиться, т.к. идентити нельзя править, а мне нужно чтобы можно было менять


sniknik   (2004-11-18 13:38:00) [12]

> Я не пойму, что мешает разделить все значения int на несколько диапазонов и на каждом сервере генерить автоинкремент только в пределах
> позволенного ему диапазона?
а дополнительное поле с номером подразделения кто мешает завести? это все предлагалось, но вместо принятия логичного/и обсуждения конкретного, вылезли выводы по каким то ХП ([25]), а логичное упорно игнорируется.


Nikolay M.   (2004-11-18 13:05:00) [13]


> просто по гуиду нельзя определить с какого сервака эта запись
> пришла

Это тебе с товарищем нужно объединяться :)
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1100700493&n=3


> вставку надо делать только с помошью хранимых процедур

Ну вот, теперь еще хранимые процедуры почему-то возникли...

Я не пойму, что мешает разделить все значения int на несколько диапазонов и на каждом сервере генерить автоинкремент только в пределах позволенного ему диапазона?


Term   (2004-11-18 13:05:00) [14]

и к тамуже при использовании гуида, вероятность генерения одинаковых идентификаторов, офигенна мала но не нулевая, а это не радует, с учётом того что записей может быть много миллионов вероятность всё же есть... так что даже малая вероятность ошибки


Term   (2004-11-18 12:15:00) [15]


> И это GUID, такой тип там есть и он устойчив к репликации
> и уникальность, название немного другое, проверь по BOL

я в курсе, не совсем же лентяй .

просто по гуиду нельзя определить с какого сервака эта запись пришла, а это тоже нужно, в общем не с проста я это замыслил, т.е. как я понял из всего выше сказанного вставку надо делать только с помошью хранимых процедур??? и в них получать нужные значения, сделать автоикремент и по его значению получать составное поле. я всё прально понял???


Nikolay M.   (2004-11-18 11:59:00) [16]


> Term   (18.11.04 11:32) [21]
> > А вот это в корне неправильно. Идентификатор, он на то
> > и идентификатор, чтобы быть неизменным
>
> я знаю просто я не озвучил всей задачи

Тренируешь наши телепатические способности? :)
А озвучить хотя бы в общем задачу? Что за манера, спрашивать А, а получив правильный ответ говорить, что вообще-то имелось ввиду Б?


sniknik   (2004-11-18 11:45:00) [17]

> название немного другое ...
uniqueidentifier


Anatoly Podgoretsky   (2004-11-18 11:42:00) [18]

Term   (18.11.04 11:32) [21]
значение ключа ИМЕЕТ значение и в другой БД не должно меняться такова задача, поэтому всю кашу и заварил

И это GUID, такой тип там есть и он устойчив к репликации и уникальность, название немного другое, проверь по BOL


Term   (2004-11-18 11:32:00) [19]


> А вот это в корне неправильно. Идентификатор, он на то и
> идентификатор, чтобы быть неизменным

я знаю просто я не озвучил всей задачи


> MSSQL2000 то у нее есть и ключи расчитаные на репликацию.

значение ключа ИМЕЕТ значение и в другой БД не должно меняться такова задача, поэтому всю кашу и заварил


sniknik   (2004-11-18 11:26:00) [20]

именно так как в вопросе
CREATE TABLE Table1 (ID INT IDENTITY(10, 1), FioID AS Cast(Cast(ID AS Money)/10 AS Char(10) ), Name VarChar(100))
FioID - нужное поле


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо