我在表中使用标识列作为主键。
在某些情况下,我需要在插入新行之前使用主键。
例如,在 Oracle 中,我使用 :select <sequence_name>.nextval into <variable> from dual
并且我确信在我的 sp 执行时没有人会插入任何具有相同 ID 的行。
至于 SQL Server,我可以读取当前的标识值并且它是递增的,但是如果不插入一行就无法递增它。
更新:问题是 - 在插入行之前,如何在 SQL Server 中完成使用 ID(作为标识列)的任务,并确保它在存储过程结束时是唯一的。
更新:我有一个带有 HierarchyId 列的表。在我的情况下,形成第一级层次结构的方法是根据 indentity 列插入 hierarchyId 列。这就是我现在的做法:
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