2017-11-24 9 views
0

T1T2の2つのテーブルはIdNameのような列を持ちます。2つのテーブルの2つの列の値を入れ替えます

nameIdに基づいて両方のテーブルの列値を交換する方法はありますか。

enter image description here

+2

受け入れて放浪のソリューションが動作している場合だけで、テーブルの名前に –

+0

感謝を変更について何、それをマークしてください – Shashi

+0

@Shashi @Wanderer – Simone

答えて

0
  • T1はT2と
  • 更新T1は一時テーブルと
  • 更新T2が
  • ドロップ一時テーブル値値値を移入T1
  • として
  • を同じスキーマを持つ一時テーブルを作成します

サンプルコード:

SELECT Id, Name INTO #tt FROM T1 

UPDATE T1 
SET T1.Name = T2.Name 
FROM T1 INNER JOIN T2 ON T1.Id = T2.Id 

UPDATE T2 
SET T2.Name = #tt.Name 
FROM T2 INNER JOIN #tt ON T2.Id = #tt.Id 

DROP TABLE #tt 

ちょうどあなたがまたT1の一時的な列を作成し、壊滅的な結果に

0
  1. を避けるために、いくつかのエラーチェックやトランザクションを追加することができます確かに、tempNameと呼ばれます。
  2. T2のコピーをtempNameT1に対応するidにコピーします。 idを対応するT2T1
     
    update T1 
    set tempName = (
        select name 
        from T2 
        where T1.id = T2.id 
    ); 
    
  3. コピー名:T1nameからtempName
     
    update T2 
    set name = (
        select name 
        from T1 
        where T1.id = T2.id 
    ); 
    
  4. コピー値:T1から
     
    update T1 
    set name = tempName; 
  5. Drop
  6. tempName
0

テーブルT1の値と同じ値を持つテンポラリテーブルを作成します。テーブルT1nameカラムをテーブルT2nameカラムの値で更新します。次に、テーブルのname列をnameのテンポラリテーブルの列の値に更新します。両方のテーブルを更新したら、一時テーブルを削除します。

クエリ

-- create temp table 
select * into #temp from [T1]; 

-- update table T1 
update t1 
set t1.[Name] = t2.[Name] 
from [T1] t1 
join [T2] t2 
on t1.[Id] = t2.[Id]; 

-- update table T2 
update t1 
set t1.[Name] = t2.[Name] 
from [T2] t1 
join #temp t2 
on t1.[Id] = t2.[Id]; 

-- dop temp table 
drop table #temp; 

-- check both the tables 
select * from [T1]; 
select * from [T2]; 
関連する問題