我有两个表Table1和Table2:我想交换名称列值从Table1到Table2和Table2到Table1

时间:2017-03-31 09:30:14

标签: sql-server

[以下是表1和表2中的两个表] [1]

表1:列名id,名称 表2:列名id,名称

交换后,Table1的名称列数据将反映在表2中,表2的名称将反映在表1中。

我尝试使用以下查询解决此问题:

update table1 t set t.name=replace(t.name,(select name from T1 where T1.id=t.id),(select name from T2 where T2.id = t.id));
update table2 t set t.name=replace(t.name,(select name from T2 where T2.id=t.id),(select name from T1 where T1.id = t.id));

但是,它没有给出正确的结果。

2 个答案:

答案 0 :(得分:1)

您无法在一次通过中执行此操作,因为您将在下一步中覆盖要移动的值。这是使用临时表的解决方案:

SELECT * INTO #temp FROM table1;
UPDATE t1 SET name = t2.name FROM table1 t1 INNER JOIN table2 t2 ON t2.id = t1.id;
UPDATE t2 SET name = t1.name FROM #temp t1 INNER JOIN table2 t2 ON t2.id = t1.id;
DROP TABLE #temp;

答案 1 :(得分:0)

您的查询稍作修改即可。

将table temp1创建为select * from table1;

更新table1 set name =(从table2中选择名称,其中table2.id = table1.id);

update table2 set name =(从temp1中选择名称,其中temp1.id = table2.id);

谢谢, 维尼塔辛格