在 SQL Server 表中,我有以下两列:
RowId:主键、数字、标识列和自动插入。
MailId:非键、数字、非标识、非自动插入。
邮件 ID 可以重复。如果是新的 MailId,我将检查 max(MailId)+1 并将其插入新行中,如果出现重复值,则该值将作为参数出现。
逻辑看起来不错,但这里有一个问题,我只是在考虑(但准确性很低)同时可能有两个不同的新 MailId 请求。这会导致逻辑错误吗?例如,当代码检查 max(MailId)+1 为 101 时,我将其存储在变量中,但可能是在下一个插入语句执行插入表中的新记录之前。现在表中的 max(MailId)+1 将是 102 但变量中的值将是 101 ?
请提出任何建议,我也想控制这个错误的机会。
EDIT
(我没有使用identity(1,1),因为我还必须在其中传递自定义值)
为什么要使用定制轧制Identity
SQL Server 中什么时候已经有这样一个伟大的领域了?
只需使用INT Identity (1,1)
对于您的 ID 字段,每次插入行时它都会自动递增。它还可以比您手动实现的任何东西更好地处理并发性。
EDIT:
手动 ID 值示例:
SET IDENTITY_INSERT MyTable ON
INSERT INTO MyTable (IdField, Col1, Col2, Col3,...)
VALUES
(1234, 'Col1', 'Col2', 'Col3',...)
SET IDENTITY_INSERT MyTable OFF
您需要包含一个明确的字段列表INSERT
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)