很难解释我的问题,但问题在于此。我有一张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分钟,这对我正在进行这个项目的方式效果不佳。是否有一些快速简便的方法可以做到这一点我很想念??
感谢您的帮助!
答案 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
)。