2013-02-07 127 views
0

快速問題,我有一個表是一列是一組行的標識符。例如一組記錄客戶交易的行,其中每行都有客戶參考。給組的行唯一標識符TSQL

我試圖實現的是給這組行以一個新的唯一標識符,所以我可以匿名報告它。

我已經試過

UPDATE dbo.[t_Health] 
    set Code = 'ABC' + Cast(RAND() as varchar(50)) 
    where si.CustRef= si.CustRef 

非常感謝!

+0

FTR - 你提出不能可能運行update語句。 'si'別名沒有聲明。 –

+0

對不起,它應該是。其中[t_Health] .CustRef = [t_Health] .CustRef – DaveB

+0

雖然這會起作用,但它也是完全多餘的:)。您可以刪除整個where子句。 –

回答

2

要創建一個新的唯一標識符,使用NEWID()功能

with anonymousId as (
     select distinct CustRef, 
       newid() as newId 
     from t_health) 
update dbo.t_health 
set  code = ai.newId 
from dbo.t_health h join anonymousId ai on h.custref = ai.custref 
+0

我想唯一標識具有相同標識符的一組行。不給每一行一個唯一的編號 – DaveB

+0

非常感謝您的幫助 – DaveB

3

可以使用的功能Hashing任何速效一個。

UPDATE dbo.[t_Health] 
SET Code = hashbytes('SH2_512', CAST(CustRef AS VARCHAR(16)) 
+0

非常感謝! – DaveB

+0

@DaveB - 請注意,從理論上講,有碰撞的可能性,但實際上,很有可能太陽會在爆炸之前爆炸。 –

+0

我只有20000行,所以我覺得我很安全! – DaveB