我们有一个表来维护我们应用程序中特定用例的下一个可用唯一编号。我们想有一个 bigint 类型的列,它将递增并提供下一个可用数字。是否可以将此列作为标识列并自动递增同一行?
我找到了一个关于单列(身份)表的stackoverflow用法的链接?有类似的要求。但是,提到的解决方案会在表中插入一条新记录。而不是插入,我想对同一记录进行更新以跟踪下一个可用的唯一编号。
是否可以利用标识列功能,或者我需要获取当前值,显式递增并将其存储回同一列的同一行中?
我们有一个表来维护我们应用程序中特定用例的下一个可用唯一编号。我们想有一个 bigint 类型的列,它将递增并提供下一个可用数字。是否可以将此列作为标识列并自动递增同一行?
我找到了一个关于单列(身份)表的stackoverflow用法的链接?有类似的要求。但是,提到的解决方案会在表中插入一条新记录。而不是插入,我想对同一记录进行更新以跟踪下一个可用的唯一编号。
是否可以利用标识列功能,或者我需要获取当前值,显式递增并将其存储回同一列的同一行中?
不完全确定您要达到的目标。相信你刚刚添加了 ie
CREATE TABLE #Temp (rowName BIGINT IDENTITY(1,1) NOT NULL)
这将创建一个包含名为 rowName 的列的表,该列自动递增一。
我将创建一个存储过程来启动事务,增加存储的 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 次写入表并返回新值。检查该值将返回最后发出的值。