2011-12-28 62 views
0

我有一個數據庫臨時表,用於存儲從另一個系統接收的數據,然後使用它填充多個數據庫表。使用UPDATE SET FROM DATA從數據生成唯一鍵

我依靠數據獲取中的「主鍵」是唯一的,但事實證明,它們並不是唯一的,例如,鍵「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()不提供唯一的一組不同的值,但給出具有相同等級的相同不同值的兩行。 – 2011-12-28 18:52:06

+0

@ChrisGessler - 你是對的,那是OP想要的。他希望相同的ID值相等。 – 2011-12-28 19:01:44

1

出於好奇,爲什麼不根據行號生成唯一的密鑰或滾動您自己的身份認證專欄?

+0

我有過,我用它來填充臨時表查詢沒有控制,想將東西會裏面會有重複的表的居民後進行值。 – AJM 2011-12-28 16:31:11

+0

設置爲標識的列可能仍然是解決此問題的有效方法。觸發器可能會有一些性能方面的考慮因素,具體取決於事物插入的頻率以及方式。 – 2011-12-28 17:22:18