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