Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Server表中选定依赖字段的自动递增_Sql_Sql Server_Ssms - Fatal编程技术网

Sql Server表中选定依赖字段的自动递增

Sql Server表中选定依赖字段的自动递增,sql,sql-server,ssms,Sql,Sql Server,Ssms,问题: 是否可以自动完成“帮助”列(自动,无需人工干预) 如果(Login='MIPA'和'Number'中的'int'大于7))|条件 然后: 具有FolderID(varchar)的最小行 获取值1,随后的每个值都将获取值i=1,i++(即比前一个值大1,即2,3.4等) 最后看起来是这样的: Type | Name -----------+------- varchar(31)| FolderId varchar(31)| Login int | Number

问题:

是否可以自动完成“帮助”列(自动,无需人工干预)

如果(Login='MIPA'和'Number'中的'int'大于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   |  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
我做了什么

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


我使用Management 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;
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;