2016-05-12 16 views
0

私の質問を説明するのは難しいですが、ここに問題があります。私は350kレコードのテーブルを持っています。テーブルには、スキューやその他の部品情報が入っています。同じskuを持つ行はたくさんあります。たとえば、sku 45666では5行あります。これらのそれぞれに一意の識別子を付ける必要があります。例えば45666〜1、45666〜2、等...私はちょうどこの同じ列の値を持つ行に一意の識別子を追加する方法

$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++ 
} 

}

のように一度にそれらを1つずつやってwhileループにwhileループを使用したを作ってみたソリューション

これを実行すると、skuを選択したときにskatの番号が表示されます。ここで問題となっているのは、このプロジェクトが30分間実行されているだけで、このプロジェクトについてはうまくいきません。私が行方不明にこれを行うためのいくつかの迅速かつ簡単な方法はありますか?

ありがとうございました!

+0

あなたは350K別のクエリを実行しているようですが、それぞれの行を更新することになります。そうですか?もしそうなら、あなたの問題です。 –

+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

これはうまくいくはずです。そして、Skatフィールドを編集して、パトリック・マホーニーがどのように編集を依頼したかのようです。 +1 – Sturgus

+0

最後の括弧の近くでキャストに近いエラーが発生しました(varcharとしてt.rownumber)構文が正しくありません –

+0

@PatrickMahoneyどのDBMSを使用していますか? – Sturgus

0

一意のGUIDに追加するのはどうでしょうか。次に、単一の更新ステートメントで何かを行うことができます。ループは全くありません。あなたがローカルデータテーブルか何かまであなたのデータを持っている場合は

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

0

、あなたはにあなたのソースクエリを変更することができます。そして、あなたが「ID」のふりをすることができ

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

あなたの一意の識別子ですデータを扱うときには、データをサーバーに送り返す必要がなければ、あまり役に立ちません。

本当に、ある種のプライマリキーが既にテーブルに存在するはずです。そうでない場合は、そうする権限を持っている場合は追加することをお勧めします(ALTER TABLE)。

関連する問題