table Sql-Server 中所选依赖字段的自动递增

autoincrementation of selected dependent fields in the table Sql-Server

问题:

是否可以自动完成 "help" 列(自动,无需人工干预)?

if (Login = 'MIPA' AND 'int' in 'Number' is > 7 (greater than 7) ) |条件

然后:

带 FolderID (varchar) 的最小行

取值1,后面每一个取值i = 1,i++(即比前一个大1,即2、3.4等)

   Type    | Name
-----------+-------
varchar(31)| FolderId
varchar(31)| Login 
   int     | Number
   int     | Help


FolderId| Login | Number|  Help
-------+-------+-------+-----
   1   | MIPA  |   1   |  NULL
   4   | MIPA  |   8   |  NULL
   7   | MIPA  |   8   |  NULL
   9   | MIPA  |   3   |  NULL
...
  15   | MIPA  |   8   |  NULL
...
 121   | RODO  |   1   |  NULL
 124   | RODO  |   8   |  NULL
 127   | RODO  |   8   |  NULL
 129   | RODO  |   3   |  NULL
...
1215   | RODO  |   1   |  NULL

所以最后看起来像这样:

   Type    | Name
-----------+-------
varchar(31)| FolderId
varchar(31)| Login 
   int     | Number
   int     | Help


FolderId| Login | Number|  Help
-------+-------+-------+-----
   1   | MIPA  |   1   |  NULL
   4   | MIPA  |   8   |  1
   7   | MIPA  |   8   |  2
   9   | MIPA  |   3   |  NULL
...
  15   | MIPA  |   8   |  3
...
 121   | RODO  |   1   |  NULL
 124   | RODO  |   8   |  NULL
 127   | RODO  |   8   |  NULL
 129   | RODO  |   3   |  NULL
...
1215   | RODO  |   1   |  NULL

我做了什么?

我从来没有在数据库中修改过他们的脚本,所以我不知道这样的操作是否可行

我使用 Managment Studio 2018

您可以这样计算:

select t.*,
       (case when login = 'MIPA' and Number > 7
             then row_number() over (partition by login, (case when number > 7 then 1 else 0 end)
                                     FolderId
                                    )
        end) as new_help
from t;

如果要更新值,请使用可更新的 CTE:

with toupdate as (
      select t.*,
             row_number() over (partition by login order by FolderId) as new_help
      from t
      where login = 'MIPA' and number > 7
     )
update toupdate
    set help = new_help;