选择前1个语句中的唯一ID键

时间:2018-02-22 14:35:16

标签: sql sql-server

使用自己的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的参考

https://social.msdn.microsoft.com/Forums/sqlserver/en-US/3eb9dba6-2f8d-4c48-9aa1-c56f31527690/rowlock-and-updlock-difference?forum=transactsql

两个用户可能获得相同的id,并说使用UPDLOCK提示阻止,其中

  

来自#2的进程将在SELECT上被阻止   声明

我的问题是正确的,但是在进程#1通过select并获取id并让#2进程也得到它自己的id后如何保证#1进程已经插入其id进行# 2进程ID不同?

另外的替代方案是这个id是自动递增的(但在这种情况下是不可能的)另一个是使用NEWID()/ GUID来防止这个问题,因为它将是唯一的密钥但是改变了主要的对于guid类型int类型的键会从某些搜索中带来性能问题,这是真的吗?还是可以考虑?

0 个答案:

没有答案