确定序列是否已开始

时间:2015-12-22 18:09:36

标签: sql sql-server sql-server-2012 sequence

如果您创建序列为:

CREATE SEQUENCE TestSequence
START WITH 1
INCREMENT BY 1
MINVALUE 1
MAXVALUE 5
NO CYCLE;

如果您查看sys.sequences中的记录,就会看到start_value 1current_value 1

如果您随后使用以下内容检索值

SELECT NEXT VALUE FOR TestSequence;

您获得值1。但如果您再次查看记录,current_value仍为1。仅当您检索第二个值时,2 current_value变为2

实际上,如上所述创建两个相同的序列,并从第一个中选择一个值而从第二个中选择无,这两个序列行之间没有区别(除了不同的时间戳/ ID)。我怎么知道其中一个已经开始而另一个没有?

这是一个问题的一个原因是我不能依赖current_value成为"最后一个值"或者"下一个值",因为它开始于" next"但随后立即成为"最后"。我可能需要做的就是扔掉第一个值,然后current_value希望始终意味着"最后一个值"。

1 个答案:

答案 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。)