在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/

10-12 01:26