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

时间:2016-05-12 17:53:02

标签: sql powershell unique identifier

很难解释我的问题,但问题在于此。我有一张350k的记录表。该表填充了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++
}

}

在我选择它之后,我会做的是与sku的concat编号。这里的问题是这已经运行了30分钟,这对我正在进行这个项目的方式效果不佳。是否有一些快速简便的方法可以做到这一点我很想念??

感谢您的帮助!

3 个答案:

答案 0 :(得分:3)

尝试使用此查询(请不要在测试或备份之前在生产数据上运行此命令):

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

如果您将数据下载到本地数据表或其他内容,则可以将源查询更改为:

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

然后你可以假装" ID"在处理数据时,它是您的唯一标识符,但如果您必须将数据发送回服务器,它将不会有太大帮助。

实际上,桌子上应该有某种主键。如果没有,您可能需要考虑添加一个,如果您有权这样做(ALTER TABLE)。