2011-12-28 16 views
0

複数のデータベーステーブルを作成する前に、別のシステムから供給されたデータを格納するために使用されるデータベースステージングテーブルがあります。UPDATE SET FROMパターンを使用してデータから固有キーを生成する

フィードのデータがユニークであることに「プライマリキー」を使用していましたが、ユニークではないことが判明しました。キー "1"は "値A"と "値B"に適用できるので、明らかにプライマリキーではありません!!!

データを信頼できなくなったため、ステージングテーブルの内容に基づいて独自のキーを生成することを考えていました。例えば。 "列A"の場合、その列の固有値に基づいて固有の整数ベースのキーを生成します。これはUPDATE SET FROMまたは別のメカニズムを介して可能ですか?

答えて

1

私はあなたが行に番号を付けるdense_rank()とCTEを使用することができ、その列内の個別 値

に基づいて一意の整数ベースのキーを生成します。

;with C as 
(
    select ID, 
     dense_rank() over(order by ColumnA) as rn 
    from YourTable 
) 
update C 
set ID = rn 

ここで試してみてください:http://data.stackexchange.com/stackoverflow/q/122782/

+0

DENSE_RANK()は一意の異なる値のセットを提供しませんが、同一の異なる値を持つ2つの行に同じランクを与えます。 –

+0

@ChrisGessler - あなたは正しいです、そして、それはOPが望んでいるものです。彼は等しい値のために同じIDを望んでいます。 –

1

好奇心ではなく、行番号に基づいて一意のキーを生成したり、独自のIDの列をロールオーバーしたりしないでください。

+0

私はステージング表を移入するために使用するクエリを制御することはできませんので、それを重複していますテーブルの人口後に行っても何かをだろうと考えました。値。 – AJM

+0

アイデンティティとして設定された列は、引き続き有効な方法です。トリガには、物事の挿入頻度や方法に応じて、いくつかのパフォーマンスに関する考慮事項があるでしょう。 –

関連する問題