isp*_*ack 0 sql-server migration entity-framework functions max
我应该使用脚本从表中获取最大值。它应该看起来像这样
BEGIN
DECLARE @MaxID AS INT
SELECT @MaxID = MAX([Id]) FROM dbo.suggestion
Insert into suggestion
values(@MaxID+ 1, 'value', 1);
END
Run Code Online (Sandbox Code Playgroud)
相反,由于一些错误,它是这样的
BEGIN
DECLARE @MaxID AS INT
SELECT @MaxID = [Id] FROM dbo.suggestion
Insert into suggestion
values(@MaxID+ 1, 'value', 1);
END
Run Code Online (Sandbox Code Playgroud)
到目前为止,它运行良好,由于当我们开始深入研究时出现了其他一些问题,然后它就暴露出来了。
我想知道到目前为止它是如何运作的。
如果有人分享他们的知识,我们将不胜感激
TIA
有时你会很幸运。您的旧查询将分配变量@MaxId
给从查询中获得的最后一个结果(因为它不断地为每个结果重新分配变量)
SELECT [Id] FROM dbo.suggestion\n
Run Code Online (Sandbox Code Playgroud)\n如果您此时有一个索引,那么Id
SQL Server 会为您扫描该索引,因此最后的结果是当前的最高值Id
。
您对使用的更正max(Id)
并不能真正解决您的问题,查询可以为您提供可能导致唯一索引违规的结果。想象一下当两个会话尝试同时运行相同的代码时会发生什么 - 它们将获得相同的max(Id)
值,因此尝试插入相同的值Id
值。
你想使用一个序列,这将保证在不序列化对表的访问的情况下获得唯一值(这是您\xe2\x80\x99d 必须执行的操作才能使现有解决方案正常工作)。
\n 归档时间: |
|
查看次数: |
507 次 |
最近记录: |