Sql server 插入列以生成T-SQL中的主键

Sql server 插入列以生成T-SQL中的主键,sql-server,tsql,insert,primary-key,Sql Server,Tsql,Insert,Primary Key,我现在有一个超过一百万条记录的巨大表,它当前包含以下两列:CustomerName和AmountBilled 我想添加另一列,我们可以称之为PurchaseID,这样CustomerName+PurchaseID就成为了一个唯一的组合,因此我可以创建一个主键 例如,我的原始数据如下所示: CustomerName AmountBilled ------------------------- Bill $2 Bill $3.5 Joe

我现在有一个超过一百万条记录的巨大表,它当前包含以下两列:CustomerName和AmountBilled

我想添加另一列,我们可以称之为PurchaseID,这样CustomerName+PurchaseID就成为了一个唯一的组合,因此我可以创建一个主键

例如,我的原始数据如下所示:

CustomerName AmountBilled
-------------------------    
Bill          $2
Bill          $3.5
Joe           $5
Bill    1    $2
Bill    2    $3.5
Joe     1    $5
我希望我的新表如下所示:

CustomerName AmountBilled
-------------------------    
Bill          $2
Bill          $3.5
Joe           $5
Bill    1    $2
Bill    2    $3.5
Joe     1    $5
使用SQL计算的第二列


正确的SQL语句是什么?

这完全是个坏主意,PK不应该在字符串上,对性能不利。除此之外,如果有人使用相同的索引将名称更新为其他名称,会发生什么情况?您应该通过将客户和FK从原始表中发送给客户来规范化这一点,以找出客户名称。感谢@LuisLL,这只是我在这里举的一个示例,用于说明目的,实际的表看起来比这个好得多:
alter table TableName
    add PurchaseID int NULL
GO
;with cte as (
  select *, rn = row_number() over (partition by CustomerName order by @@spid)
  from TableName
)
update cte set PurchaseID = rn
GO
alter table TableName
    alter column PurchaseID int not NULL
GO