连续序列号为SELECT MAX

时间:2015-02-20 02:56:11

标签: sql sql-server select max

这是我的表:

MyTable(Id,Name,Description,SerialNumber)

Id是身份字段和主键。 SerialNumber是一个带有唯一索引的int。

INSERT INTO MyTable (
    Name, 
    Description, 
    SerialNumber
) VALUES (
    'SampleName', 
    'SampleDesc', 
    ISNULL(MAX(SerialNumber),0) + 1 FROM MyTable)

以这种方式管理序列号的缺点是什么? 什么是同意?

1 个答案:

答案 0 :(得分:0)

我认为这样做是为了防止数字上的差距。通过序列和身份,你不能假设永远不会有间隙,特别是在回滚的情况下。

您遇到的问题是存在竞争条件,并且您的某些插入可能会出错,或者您的表可能会有重复的序列号,具体取决于列是否唯一。发生这种情况是因为在它们中的任何一个将数字插入表中之前,2个进程可能同时获取最大值。

相关问题