我需要使用 C# 在 SQL Server 2008 中自动读取并递增一个值。
例如,我必须插入“批次”的项目,为此我需要最后一批的编号,并确保没有其他人获得该编号。
因此,我有一张仅包含最后批号的表格,并找到一种只需一步即可获取和更新编号的方法。
我怎样才能做到这一点?
批号是否必须按顺序排列?为什么不直接使用identity
?这在并发性方面更好,否则您需要阻止并发插入尝试,以防它们回滚并在序列中留下间隙。
如果这绝对是一个要求,但是你可以这样做
CREATE TABLE dbo.Sequence
(
OneRow CHAR(1) DEFAULT('X') PRIMARY KEY CHECK(OneRow = 'X'),
val INT
)
插入带有初始种子的行。
INSERT INTO dbo.Sequence
(val)
VALUES (1)
然后为您的插入分配足够大小的范围(显然在同一事务中调用它)
CREATE PROC dbo.GetSequence
@val AS int OUTPUT,
@n as int =1
AS
UPDATE dbo.Sequence
SET @val = val = (val + @n);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)