Sql server 插入列以生成T-SQL中的主键
我现在有一个超过一百万条记录的巨大表,它当前包含以下两列:CustomerName和AmountBilled 我想添加另一列,我们可以称之为PurchaseID,这样CustomerName+PurchaseID就成为了一个唯一的组合,因此我可以创建一个主键 例如,我的原始数据如下所示: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
-------------------------
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