Sql server g消除差距的可能性(在你自己的身份实现中)。你认为你会受到什么样的回报?我不太清楚。。。例如,最后一张发票的编号为190,我删除了发票#32。然后,新插入的发票需要有编号32。这就是我不需要身份的原因。你真的应该重复使用发票号码吗?我不会……允许数字较低的

Sql server g消除差距的可能性(在你自己的身份实现中)。你认为你会受到什么样的回报?我不太清楚。。。例如,最后一张发票的编号为190,我删除了发票#32。然后,新插入的发票需要有编号32。这就是我不需要身份的原因。你真的应该重复使用发票号码吗?我不会……允许数字较低的,sql-server,Sql Server,g消除差距的可能性(在你自己的身份实现中)。你认为你会受到什么样的回报?我不太清楚。。。例如,最后一张发票的编号为190,我删除了发票#32。然后,新插入的发票需要有编号32。这就是我不需要身份的原因。你真的应该重复使用发票号码吗?我不会……允许数字较低的发票具有较晚日期的立法……如果我不必使用标识列的话?我的理解是,SQL Server标识列的实现方式是因为考虑到两个或多或少同等重要的问题:并发性和性能。因为前者,你保证有独特的价值观,但因为后者,你不得不忍受可能的差距。现在你正试图消除差距的


g消除差距的可能性(在你自己的身份实现中)。你认为你会受到什么样的回报?我不太清楚。。。例如,最后一张发票的编号为190,我删除了发票#32。然后,新插入的发票需要有编号32。这就是我不需要身份的原因。你真的应该重复使用发票号码吗?我不会……允许数字较低的发票具有较晚日期的立法……如果我不必使用标识列的话?我的理解是,SQL Server标识列的实现方式是因为考虑到两个或多或少同等重要的问题:并发性和性能。因为前者,你保证有独特的价值观,但因为后者,你不得不忍受可能的差距。现在你正试图消除差距的可能性(在你自己的身份实现中)。你认为你会受到什么样的回报?我不太清楚。。。例如,最后一张发票的编号为190,我删除了发票#32。然后,新插入的发票需要有编号32。这就是我不需要身份的原因。你真的应该重复使用发票号码吗?我不会……立法允许发票号码较低的发票日期较晚。。。。?
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE 

BEGIN TRAN
SET IDENTITY_INSERT dbo.myTable ON

DECLARE @minId int = -1

;WITH cterows(Id, rownum)
AS
(
   SELECT Id, row_number() OVER(ORDER BY Id ASC) AS rownum 
)
SELECT @minId = MIN(rownum) FROM cterows
WHERE Id <> rownum

IF (@minId IS NOT NULL AND @minId <> -1) 
   BEGIN
     -- found a gap
     -- Insert at @minId
   END
ELSE
   BEGIN
     -- No gap, INSERT as normal
   END


SET IDENTITY_INSERT dbo.myTable OFF;
COMMIT