Как увеличить столбец Identity - PullRequest
2 голосов
/ 28 сентября 2011

Я использую столбцы идентификаторов в качестве первичного ключа в моих таблицах.

В некоторых ситуациях мне нужно работать с первичными ключами перед вставкой новой строки.

Например, в Oracle Iиспользуйте: select <sequence_name>.nextval into <variable> from dual и я был уверен, что никто не вставит ни одной строки с тем же идентификатором во время выполнения моего sp.

Что касается SQL Server, я могу прочитать текущее значение идентификатора и его приращение, но естьнет способа увеличить его без вставки строки.

Обновлено: Вопрос в том, как мне выполнить задачу по работе с идентификатором (в качестве столбца идентификаторов) в SQL Server перед вставкой строки и быть уверенным, что она будетбыть уникальным в конце моей хранимой процедуры.

Обновлено: у меня есть таблица со столбцом HierarchyId. Способ формирования первого уровня иерархии, в моем случае, заключается в вставке столбцаierarchyId в соответствии со столбцом идентификаторов.Вот как я это сделал сейчас:

begin transaction

insert into [dbo].[Group](GroupTypeId,CompanyOwnerId,GroupHierarchyId)
     values(@GroupTypeId,@HeaderCompanyId,null)

     update [dbo].[Group] 
      set GroupHierarcyId=hierarchyid::GetRoot().GetDescendant(cast ('/'+cast(@NewGroupId as varchar)+'/' as hierarchyid),null) 
     where GroupId=scope_identity()

    commit

Ответы [ 2 ]

1 голос
/ 28 сентября 2011

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

ОДНАКО,

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

0 голосов
/ 28 сентября 2011

Если вам нужен ключ, который был бы уникальным для баз данных и серверов баз данных, то GUID ( Global Unique Identifier ), безусловно, удовлетворяет эту потребность. Если вы хотите сгенерировать новый сервер GUID, вы можете просто использовать функцию NEWID()

SELECT NEWID()
...