Вниз
Скачать: CL | DM;

Генерация номера заказа   Найти похожие ветки 

 
geg ©   (2004-03-30 16:55) [0]

На InterBase Было сделано GENERATOR->procedure->IBStoredProc = новый номер
А ка реализовать тоже самое на SQL server 2000


 
Delirium ©   (2004-03-30 16:55) [1]

NewID()


 
Fiend ©   (2004-03-30 17:22) [2]

а не проще ли указать что поле identity?
ибо для NEWID надо и специальный тип поля использовать


 
geg ©   (2004-03-30 17:33) [3]

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


 
bushmen ©   (2004-03-30 17:33) [4]

Добавляешь записи через хранимую процедуру, а потом возвращаешь через параметр номер заказа


 
bushmen ©   (2004-03-30 17:34) [5]

>просто как генератор добовляет к последнему +1 и все..

Не такой он уж и простой. Все зависит от умения программиста! :)


 
geg ©   (2004-03-30 17:37) [6]

Да через процедуру это идее нужно попробывать.


 
Delirium ©   (2004-03-30 17:46) [7]

"а не проще ли указать что поле identity?" - если подходить к вопросу академично и в соответсвии с рекомендациями Microsoft, то GUID как раз то - что нужно, однако, мало кто стрит БД грамотно и потому, можно и Identity, хотя лучше - хранилище идентификаторов.


 
Romkin ©   (2004-03-30 17:47) [8]

Для абстрагирования метода генерации уникальных идентификаторов для каждой записи можно вынести его в хранимую процедуру, которая будет возвращать ID новой записи. Это позволяет легко добавлять записи в подчиненную таблицу, не производя никаких дополнительных манипуляций. В дальнейшем вы можете возложить на эту процедуру, например, генерацию идентификаторов в заданном диапазоне, или обеспечить сквозную нумерацию. Для хранения идентификаторов проще всего иметь отдельную таблицу примерно следующего вида:

create table Seeds (
 TableName varchar(30),   --имя таблицы
 ID int,                  --ID последней вставленной записи в данную таблицу
 LowOffset int            --нижняя граница диапазона
)
go


При добавлении пользовательских таблиц необходимо не забывать вставлять в эту таблицу соответствующие записи. Ниже приведен пример SQL-запроса, делающего это:


insert into Seeds(TableName, ID, LowOffset, HiOffset)
 values("MyCoolTable", 0, 0, 1000000)
go


Текст процедуры в простейшем случае будет выглядеть так:

create procedure CLIENT_ID
 @TableName varchar(30),
 @ID int output
as
 update Seeds
   set ID = ID + 1,
       @ID = ID + LowOffset
   where TableName = @TableName
go


При обновлении (update) таблицы накладывается блокировка изменения, которая не позволит другому клиенту выполнить эту же процедуру одновременно с первым. Помимо вышеперечисленного такой подход упрощает жизнь при необходимости репликации данных между филиалами. Тогда в каждом филиале настраивается свой диапазон, и первичные ключи гарантированно не будут пересекаться.

(c) http://rsdn.ru/article/db/midas_migration.xml


 
bushmen ©   (2004-03-30 17:56) [9]

>первичные ключи гарантированно не будут пересекаться.

А это как сказать :) Потому что можно и затереть эту табличку и удалить запись


 
Delirium ©   (2004-03-30 18:03) [10]

"затереть эту табличку и удалить запись" - то, что так подробно обрисовал Romkin и называется хранилище идентификаторов - фундаментальная часть любой серьёзной БД, так что улыбаться тут нечему.


 
Danilka ©   (2004-03-31 16:04) [11]

Если не ошибаюсь, для identity настраивается приращение и откуда стартовать, так что для филиалов тоже подойдет. Можно, например, для одного филиала сделать четные, для другого нечетные. :))
А для вставок в подчиненные таблицы есть переменная @@identity, довольно удобно все это в мс-скуле сделано, правда я в нем новичек еще.


 
Danilka ©   (2004-03-31 16:04) [12]

хе-хе, а ветка-то старая, что-то я ее поднял по ссылке зачем-то. :))


 
bushmen ©   (2004-03-31 16:07) [13]

>Danilka ©
Если почитаете выше, то я и говорил о том, что зачем мучаться с созданием собственной процедуры генерации, если есть identity ?!


 
Danilka ©   (2004-03-31 16:17) [14]

[13] bushmen ©   (31.03.04 16:07)
Читал :))
Просто, это, вроде, не особо восприняли, ссылаясь на вставку в другие таблицы. Плюс еще Romkin ссылку привел о фишке, котрая позволит при репликации, вот я и уточнил, что если сразу о репликации думать, то и штатные средства прокатят.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.021 c
1-1081334933
cvg
2004-04-07 14:48
2004.04.25
Проблема с выводом графиков. Это баг от Borland?


7-1077726910
Phantomaz
2004-02-25 19:35
2004.04.25
Почему SetWindowsHookEx не пашет, если активно Dos-окно ?


14-1080720767
Undert
2004-03-31 12:12
2004.04.25
Подскажиет плииззз


3-1080541002
n313
2004-03-29 10:16
2004.04.25
Можно ли добавить рисунок в строку таблицы(Table)?


3-1080534305
russko
2004-03-29 08:25
2004.04.25
Record locked by another user




   Наверх