这是我的表:
MyTable(Id,Name,Description,SerialNumber)
Id是身份字段和主键。 SerialNumber是一个带有唯一索引的int。
INSERT INTO MyTable (
Name,
Description,
SerialNumber
) VALUES (
'SampleName',
'SampleDesc',
ISNULL(MAX(SerialNumber),0) + 1 FROM MyTable)
以这种方式管理序列号的缺点是什么? 什么是同意?
答案 0 :(得分:0)
我认为这样做是为了防止数字上的差距。通过序列和身份,你不能假设永远不会有间隙,特别是在回滚的情况下。
您遇到的问题是存在竞争条件,并且您的某些插入可能会出错,或者您的表可能会有重复的序列号,具体取决于列是否唯一。发生这种情况是因为在它们中的任何一个将数字插入表中之前,2个进程可能同时获取最大值。