2016-12-27 7 views
1

彼らが持っている場合、私は、一意のIDとtbusertableテーブルのuid列を更新したいsql server2008 r2更新固有のID 2008 R2

tbusertable 
    userid username uid status 
     1 abc  null null 
     2 yax  null null 
     3 xcd  null null 
     4 max  null null 
     5 wax  null null 
     6 ear  null null 
     7 yes  null null 
     8 sqt  null null 
     9 ora  null null 



tbphtable 
    pid userid phnos 
    1 1  456 
    2 2  456 
    3 3  4568 
    4 4  789 
    5 5  5555 
    6 6  4599 
    7 7  456 
    8 8  111 
    9 9  111 



tbeidtable 
    eid userid eid 
    1 1  [email protected] 
    2 2  [email protected] 
    3 3  [email protected] 
    4 4  [email protected] 
    5 5  [email protected] 
    6 6  [email protected] 

現在私は、次のいるテーブル構造カーソルなしeidに同じphnosテーブルが大きいレコードとカーソルが

願望出力

を実行するために長い時間がかかる持っているので、あなたは、そう、彼らは同じ一意のIDを持っており、同様に userid 5,6が同じeidを持っているので、彼らは別の一意のID を持っており、同様にuserid 8,9私が正しく理解していればそう、彼らは同じ異なる固有のID

tbusertable 
     userid username uid         status 
      1 abc  D7CCBC4E-EEE6-4AC8-806D-A04DCC77DF54 null 
      2 yax  D7CCBC4E-EEE6-4AC8-806D-A04DCC77DF54 null 
      3 xcd  null null 
      4 max  0608CFF7-3FC6-4952-91AE-5E42D6558827 null 
      5 wax  0608CFF7-3FC6-4952-91AE-5E42D6558827 null 
      6 ear  null         null 
      7 yes  D7CCBC4E-EEE6-4AC8-806D-A04DCC77DF54 null 
      8 sqt  5823E1FD-2AF3-4BA7-8C48-946A16E0D3E2 null 
      9 ora  5823E1FD-2AF3-4BA7-8C48-946A16E0D3E2 null 
+0

「uid」はどこから来たのですか? –

+0

私は、SQLサーバ – prasad

答えて

2

を持っている同じphnosを持つphnos同じを持っています副問合せを使用して、各電話番号の新しいIDを計算して、更新のためにこれを使用することができます。

update u 
    set uid = pp.new_uid 
    from tbusertable u join 
     tbphtable p 
     on u.userid = p.userid join 
     (select phnos, newid() as new_uid 
      from tbphtable 
      group by phnos 
     ) pp 
     on p.phnos = pp.phnos; 

EDIT:

そのため、SQL Serverがクエリを最適化し、あなたは一時テーブルにnewidsを配置する必要があるかもしれませんどのように0

select phnos, newid() as new_uid 
into #pp 
from tbphtable 
group by phnos; 

そして:

update u 
    set uid = pp.new_uid 
    from tbusertable u join 
     tbphtable p 
     on u.userid = p.userid join 
     #pp pp 
     on p.phnos = pp.phnos; 

SQL Serverがされて機能し、その結果、クエリを書き換えることができます予想以上に一般的に呼ばれています。テンポラリ・テーブルに値を置くと、その問題が解決されます。

+0

でnewid()関数を使用して生成しました。同じphnosの異なる一意のIDを生成しています。たとえば、userid 1,2とします。uidを4EE998DE- 0021-4569-AB52-D1380C800691, 6DB4B434-093A-4D8E-BDFC- 1BFE100794D0 i – prasad

+0

とuseridのやり方は同じeid、例えば5と6が同じeidを持つ – prasad