使用自己的id方案如下
select TOP 1 @docID=id+1 FROM dbo.user_documents WITH (NOLOCK)
ORDER BY ID DESC
...
INSERT INTO dbo.user_Documents ([id],...) Values(@docID,...)
作为@Erland Sommarskog的参考
两个用户可能获得相同的id,并说使用UPDLOCK提示阻止,其中
来自#2的进程将在SELECT上被阻止 声明
我的问题是正确的,但是在进程#1通过select并获取id并让#2进程也得到它自己的id后如何保证#1进程已经插入其id进行# 2进程ID不同?
另外的替代方案是这个id是自动递增的(但在这种情况下是不可能的)另一个是使用NEWID()/ GUID来防止这个问题,因为它将是唯一的密钥但是改变了主要的对于guid类型int类型的键会从某些搜索中带来性能问题,这是真的吗?还是可以考虑?