【发布时间】:2021-01-08 19:09:14
【问题描述】:
所以我需要实现一个自增列。我在一个表中有一个列,它有一个将充当计数器的 int,并且会有另一个表具有相应的行数,每一行都有它自己的计数器。我认为这实现起来相当简单,但是在做了一些研究之后,我发现了一些论坛,他们提到如果多个事务大致同时运行,即使通过运行选择、更新、并插入一笔交易
在我看来,如果我使用 OUTPUT 子句来获取第一个表正在更新的新值,我可以完全避免这个问题。
这就是我想到的 T-SQL。我的情况应该可以吗?
BEGIN TRANSACTION;
DECLARE @tblCtrs table (Ctr int)
DECLARE @CtrVal INT
UPDATE Table1
SET Ctr = Ctr+1
OUTPUT inserted.Ctr INTO @CtrVals
WHERE id=<whatever id value>
SET @CtrVal = (SELECT TOP(1) Ctr FROM @tblCtrs)
INSERT INTO TABLE2 (Ctr, ....)
VALUES( @CtrVal, ....)
COMMIT;
【问题讨论】:
标签: sql-server tsql transactions increment