如何将唯一标识符附加到具有相同列值的行

How can I append a unique identifier onto rows with same column value

很难解释我的问题,但这就是问题所在。我有一个 table 的 350k 记录。 table 填充了 skus 和其他零件信息。有许多行具有相同的 sku。例如,sku 45666 有 5 行。我需要在每一行上放置一个唯一标识符。例如 45666~1、45666~2 等...我想出的解决方案是在 while 循环中使用 while 循环,然后像这样一次一个地执行它们

$i=0
while($i -le $array.length) {
$j=0
$mfp = $array.itemnumber[$i]
while($array.itemnumber[$i] = $mfp) {
    Invoke-SQLCmd -ServerInstance $Server -Database $Database -Query "update whiproducts set number = $j"
    $i++
    $j++
}

}

这之后我会做的是当我 select 它时与 sku 的连接数。这里的问题是,这已经 运行 了大约 30 分钟,这与我处理这个项目的方式不相符。有没有一些快速简便的方法来做到这一点我想念!?

感谢您的帮助!

如何附加一个唯一的 GUID。然后你可以只用一个更新语句来做事情,根本没有循环。

UPDATE whipproducts SET number = number + '_' + cast(NEWID() as varchar(100))

如果您要将数据转化为本地数据table 或其他,您可以将源查询更改为:

SELECT ROW_NUMBER() OVER (ORDER BY sku) AS ID, *
FROM YourTable;

然后您可以假装 "ID" 是您在处理数据时的唯一标识符,但如果您必须将数据发送回服务器,这将无济于事。

真的,table 上应该已经有某种主键了。如果没有,如果您有权限,您可能需要考虑添加一个 (ALTER TABLE)。

试试这个查询(请不要 运行 在测试或备份之前对生产数据执行此查询):

update t
set t.sku = t.sku + '~' + cast(t.RowNumber as varchar)
from (
    select sku, row_number() over(partition by sku order by sku) as RowNumber
    from whiproducts) t