create PROCEDURE UP_NewTableID
@TCode VARCHAR(20),@NextID INT OUTPUT
AS
DECLARE @CurTKey INT,@NextTKey INT
BEGIN TRAN TransID
SELECT @CurTKey=TKey FROM KeyTable WITH (UPDLOCK)--采用更新锁,并保持到事务完成
WHERE TCode=@TCode
IF @@ROWCOUNT=0 BEGIN
ROLLBACK TRAN TransID
RAISERROR('Warning: No such row is exists',16,1)
RETURN
END
SET @NextTKey=@CurTKey+1
WAITFOR DELAY '00:00:05'
UPDATE KeyTable
SET TKey=@NextTKey WHERE TCode=@TCode--此处无需验证TKey是否与SELECT的相同
COMMIT TRAN TransID
SET @NextID=@NextTKey
GO
本文介绍了一个SQL存储过程,用于实现特定表中的ID自增功能。该过程使用了事务处理来确保数据的一致性,并通过等待延迟来模拟可能的并发处理场景。此外,还采用了更新锁来防止读写冲突。
1179

被折叠的 条评论
为什么被折叠?



