Мой вопрос сложно объяснить, но вот в чем проблема. У меня есть таблица из 350к записей. Таблица заполнена артикулами и другой информацией о деталях. Есть много строк с одинаковым артикулом. Например, есть 5 строк с артикулом 45666. Мне нужно указать уникальный идентификатор для каждой из них. например, 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++
}

}

Что бы я сделал после этого, так это номер, совпадающий с артикулом, когда я его выбрал. Проблема здесь в том, что это длится около 30 минут, что просто не будет хорошо работать с тем, как я работаю над этим проектом. Есть ли какой-нибудь быстрый и простой способ сделать это, мне не хватает !?

Спасибо за любую помощь!

0
Patrick Mahoney 12 Май 2016 в 20:53

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
3
Jason Boyd 12 Май 2016 в 18:50

Как насчет добавления уникального GUID. Тогда вы можете просто делать что-то с помощью одного оператора обновления, вообще без цикла.

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

0
jhilden 12 Май 2016 в 18:07

Если вы переносите свои данные в локальную таблицу данных или что-то в этом роде, вы можете изменить исходный запрос на:

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

Затем вы можете притвориться, что «ID» - ваш уникальный идентификатор при работе с данными, хотя это не сильно поможет, если вам придется отправлять данные обратно на сервер.

Действительно, в таблице уже должен быть какой-то первичный ключ. Если нет, вы можете подумать о добавлении одного, если у вас есть для этого права (ALTER TABLE).

0
Sturgus 12 Май 2016 в 18:10