Sql server 根据另一列值自动分配唯一ID的过程

Sql server 根据另一列值自动分配唯一ID的过程,sql-server,sql-server-2019,Sql Server,Sql Server 2019,我有一个数据库,其中存储了一个默认ID为100的列和另一个SQL中字符串值重复的列。大概是这样的: 100 BEYONDIFUL ! 100 BEYONDIFUL ! 100 BEYONDIFUL ! 100 BEYONDIFUL ! 100 JAGUAR 100 JAGUAR 100

我有一个数据库,其中存储了一个默认ID为100的列和另一个SQL中字符串值重复的列。大概是这样的:

100                  BEYONDIFUL !
100                  BEYONDIFUL !
100                  BEYONDIFUL !
100                  BEYONDIFUL !
100                  JAGUAR
100                  JAGUAR
100                  JAGUAR
100                  JAGUAR
...
01                  BEYONDIFUL !
01                  BEYONDIFUL !
01                  BEYONDIFUL !
01                  BEYONDIFUL !
02                  JAGUAR
02                  JAGUAR
02                  JAGUAR
02                  JAGUAR
...
在此之前,当我想将ID列更新为唯一ID时,我会这样做:

更新表
SET dbo.table.Id='01'
其中dbo.table.Value类似于“thesenior”
所以它会是这样的:

100                  BEYONDIFUL !
100                  BEYONDIFUL !
100                  BEYONDIFUL !
100                  BEYONDIFUL !
100                  JAGUAR
100                  JAGUAR
100                  JAGUAR
100                  JAGUAR
...
01                  BEYONDIFUL !
01                  BEYONDIFUL !
01                  BEYONDIFUL !
01                  BEYONDIFUL !
02                  JAGUAR
02                  JAGUAR
02                  JAGUAR
02                  JAGUAR
...
但是,这对于非常大的数据库并不实用,因为必须对value列中的每个字符串执行此操作


如何使其自动化,以便对每个唯一值(及其重复值)分配一个介于01和n之间的ID(n=不同值的数量)?

您可以使用
行编号
生成您的ID值并进行更新。没有任何关于如何应用编号的澄清,这只是根据字母顺序分配编号

update t set t.Id=v.id
from Table t
join (
 select [value], Row_Number() over (order by [value]) Id
 from Table group by [value]
)v on v.[value]=t.[value]

决定哪个字符串值得到哪个ID值的规则是什么?您的ID真的是一个varchar吗?按字母顺序排列,是的