如果您创建序列为:
CREATE SEQUENCE TestSequence
START WITH 1
INCREMENT BY 1
MINVALUE 1
MAXVALUE 5
NO CYCLE;
如果您查看sys.sequences
中的记录,就会看到start_value
1
和current_value
1
。
如果您随后使用以下内容检索值
SELECT NEXT VALUE FOR TestSequence;
您获得值1
。但如果您再次查看记录,current_value
仍为1
。仅当您检索第二个值时,2
current_value
变为2
。
实际上,如上所述创建两个相同的序列,并从第一个中选择一个值而从第二个中选择无,这两个序列行之间没有区别(除了不同的时间戳/ ID)。我怎么知道其中一个已经开始而另一个没有?
这是一个问题的一个原因是我不能依赖current_value
成为"最后一个值"或者"下一个值",因为它开始于" next"但随后立即成为"最后"。我可能需要做的就是扔掉第一个值,然后current_value
希望始终意味着"最后一个值"。
答案 0 :(得分:0)
到目前为止,我对此的解决方案只是在创建序列时始终拉动并忽略第一个值,然后无需区分已启动的序列和尚未完成的序列,因为它们将全部已经开始。所以要创建一个序列:
CREATE SEQUENCE TestSequence
START WITH 1
INCREMENT BY 1
MINVALUE 1
MAXVALUE 5
NO CYCLE;
SELECT NEXT VALUE FOR TestSequence;
这会使current_value
表示"最后一个值",但它也会使start_value
独占,所以你必须考虑到这一点。创建它们并检索有关它们的信息。 (例如,使用较少1
的起始值,或者从获取下一个值的结果中减去1
。)