![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Автоинкремент своими руками [MSSQL2000]
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 - нужное поле