SQL更新丢失订单的列?

Ada*_*Ada 5 c# sql

我有一个情况,我在SQL上很弱.这里是.

我有已归档的项目,这些项目存储有数字.在数据库表中就是这样.

RowId   Number  CaseId
234        1       787
235        2       787
236        3       787
237        4       787
238        5       787
Run Code Online (Sandbox Code Playgroud)

这是第一次插入时的外观.但删除后,删除3号,现在在DB上就是这样.

RowId   Number  CaseId
234        1       787
235        2       787   
237        4       787
238        5       787
Run Code Online (Sandbox Code Playgroud)

3已经消失,但我需要的是这个.

RowId   Number  CaseId
234        1       787
235        2       787   
237        3       787
238        4       787
Run Code Online (Sandbox Code Playgroud)

这些数字也应该更新.但我无法想办法做到这一点.顺便说一句,有许多CaseId.我不会更新整个表格,我会通过CaseId选择它.你能告诉我怎么做吗?我正在使用C#.NET

我应该将它们带入列表(从Select查询中订购它们的方式)并逐个检查然后更新它们吗?我可以在C#上逐一编写支票,但我认为它效率不高.有效的方法是什么?

dba*_*lia 4

Number 是否必须在数据库本身中更新?如果没有,您还需要存储它吗?您还在编写 SQL 查询吗?或者只是使用实体框架?如果您正在编写实际的查询,并且您只需要选择返回数据时的行号,您可以尝试以下操作:

SELECT RowId, ROW_NUMBER() OVER (ORDER BY RowId ASC) AS [Number], CaseId 
FROM [MyTable] 
WHERE CaseID = 787
Run Code Online (Sandbox Code Playgroud)

编辑:正如@Mike 在评论中指出的那样,对此发表看法可能是有意义的。您可以从主表中删除 [Number] 并创建如下视图:

CREATE VIEW dbo.MyView 
AS 
    SELECT RowId, 
    ROW_NUMBER() OVER (PARTITION BY CaseId ORDER BY RowId ASC) AS Number, 
    CaseId FROM MyTable
Run Code Online (Sandbox Code Playgroud)

PARTITION 语句将确保 Number 为每个不同的 RowId 重置