在SQL Server表中,我具有以下两列:
RowId :主键,数字,标识列和自动插入。
MailId :非密钥,数字,非身份和非自动插入。
邮件ID可以重复。如果使用新的MailId,我将检查max(MailId)+1并将其插入新行,如果出现重复值,则将其作为参数。
逻辑看起来不错,但这是一个问题,我只是在考虑(但准确度非常低),同时可以有两个不同的新MailId请求。这能引起逻辑错误吗?例如,当代码检查max(MailId)+1为101时,我将其存储在变量中,但可能在下一个插入语句执行插入到表中的新记录之前。现在表中的max(MailId)+1将为102,而变量中的值为101?
任何建议,我也想控制此错误机会。
编辑
(我没有使用identity(1,1),因为我还必须在其中传递自定义值)
最佳答案
当SQL Server中已经有这么大的字段时,为什么还要使用自定义的Identity
字段呢?
只需将INT Identity (1,1)
用作您的ID字段,每次插入一行它就会自动递增。它处理并发性要好于几乎可以手动实现的任何东西。
编辑:
手动ID值样本:
SET IDENTITY_INSERT MyTable ON
INSERT INTO MyTable (IdField, Col1, Col2, Col3,...)
VALUES
(1234, 'Col1', 'Col2', 'Col3',...)
SET IDENTITY_INSERT MyTable OFF
您需要为
INSERT
包括一个明确的字段列表。关于sql - 在新行中添加max(value)+1,这可能是个问题吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6708008/