C# / Sql Server 2008 INSERT int 值自动增长到 1000000

本文关键字:1000000 int Sql Server 2008 INSERT | 更新日期: 2023-09-27 18:34:31

我最近遇到了一个奇怪的问题,在 Sql Server 2008 中只发生过一次。

我在.net Web应用程序(C#(中工作,并使用SqlCommand访问我的数据库并执行查询。我的流程如下:

  1. 我有一个视图,可以获取特定表中存在的最大数量:

    选择最大(数字(作为最大数字从我的桌子

  2. 我在一个变量中得到这个MaxNumber,然后用这个变量,我在MyTable中用MaxNumber + 1执行插入。像这样,我总是在MyTable中记录最大数量

自从一周前的那一次以来,它运行良好,突然,我看到一个从 134200 到 1000000 的 MaxNumber !

我调查了我的代码,它不可能是该行为的原因。我还检查了Web服务器的日志,没有抛出错误的插入日志。

我还查看了 Sql 服务器的日志,我没有发现错误日志......

可疑的是,该号码从"通用"号码(134200(传递到"特定"号码(1000000(。为什么是1000000?为什么不984216或1000256?

有人遇到同样的问题吗?

感谢您的帮助。

编辑 - 2014-12-23:

我进一步分析了该问题,似乎在 PreProd 环境中还原备份时发生了此问题。

解释说:我有一个 PreProd 服务器,其中我有一个 Sql Server 实例 (PreProd(,我有一个 Prod 服务器,我还有一个 Sql Server 实例 (Prod(,它每天都会在同一台服务器上备份。

当我想使用有效数据进行测试时,我会在 PreProd 数据库上还原 Prod 备份:

RESTORE DATABASE PreProd
FROM DISK = '''Prod'Backup'SQL'Prod.bak'
WITH MOVE 'Prod' TO 'E:'Bases'Data'PreProd.mdf',
MOVE 'Prod_log' TO 'E:'Bases'Data'PreProd.ldf',
REPLACE

问题发生在我恢复备份的同一天。"1000000 行"出现在我恢复的同一时刻,在我的 Prod 数据库中。有没有可能链接?Prod 服务器是否因从我的 PreProd 服务器执行的恢复命令而不堪重负,并且最终导致同时发生的插入请求崩溃?

感谢您的建议

C# / Sql Server 2008 INSERT int 值自动增长到 1000000

我唯一能想到的是,也许您可以使用 ExecuteScalar 方法获取 maxValue,而无需将结果转换为正确的数据类型

var max= cmd.ExecuteScalar();

然后

max= max+1;

否则,我看到使用您的 sqlServer 版本,您在使用 SCOPE_IDENTITY()@@IDENTITY 时可能会收到不正确的值

有关错误修复,请参阅此处,您应该更新到SQL Server 2008 R2 Service Pack 1