我们有一个表来维护我们的应用程序中特定用例的下一个可用唯一编号。我们想到了一个bigint类型的列,它将增加并提供下一个可用的数字。是否可以将此列设置为标识列并自动增加同一行?
我在stackoverflow Usage of Table with single column (Identity)?上找到了一个类似要求的链接。但是,提到的解决方案将在表中插入新记录。而不是插入,我想在同一记录上进行更新,以跟踪下一个可用的唯一编号。
是否可以利用Identity列功能,或者我需要获取当前值,显式增加并将其存储回同一列中的同一行?
答案 0 :(得分:2)
不完全确定您要实现的目标。相信你刚刚在一个身份之后添加即可。
CREATE TABLE #Temp (rowName BIGINT IDENTITY(1,1) NOT NULL)
这将创建一个名为rowName的列的表,该列自动递增1。
答案 1 :(得分:1)
我创建一个存储过程来启动事务,增加存储的bigint(不是标识)并返回新值,如果出现任何问题,则回滚事务。
SP的更新部分喜欢(无法测试atm):
DECLARE @RET TABLE (Value BigInt)
UPDATE Mytable
SET MyField += 1
OUTPUT inserted.MyField INTO @RET
IF (SELECT MAX(Value) FROM @RET) > 0
RETURN (SELECT MAX(Value) FROM @RET)
这将只对表进行1次写入并返回新值。 检查该值将返回最后发布的值。