我在表格中使用标识列作为主键。
在某些情况下,我需要在插入新行之前使用主键。
例如,在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
答案 0 :(得分:1)
您可以在表上放置一个独占锁,获取最大ID,为其添加1。那将是你的下一个ID。插入数据,解锁表格。
但是,
我无法理解为什么你想在创建之前使用值。您可以发布更多信息吗?
答案 1 :(得分:0)
如果您需要一个在数据库和数据库服务器之间唯一的密钥,那么GUID(全局唯一标识符)肯定满足了这一需求。
如果要生成新的GUID服务器,只需使用NEWID()
函数
SELECT NEWID()