如何安全地交换其他表中引用的两行ID?

时间:2016-03-24 23:34:53

标签: sql sql-server tsql

所以,假设我有一张像

这样的表格
   Table 1 
=============
id | ... 
=============
 1 | ... 
 2 | ... 
 3 | ...
 .    .
 .    .
 .    .

       Table 2 
=======================
id | table1_id | ... 
=======================
 1 |     1     | ... 
 2 |     1     | ... 
 3 |     2     | ... 
 .       .        .
 .       .        . 
 .       .        . 

table1_id中的Table 2引用id中的Table 1

我想要idid=1行的id=2个。

我可以在不搞砸关系的情况下这样做吗?

3 个答案:

答案 0 :(得分:3)

在[表1]中使用新id插入带有id 1行副本的虚拟条目。然后使用以下查询

更新id为1的id 1的所有列
UPDATE  T
SET T.col2  = S.col2
    ,T.col3 = S.col3
    ,T.col4 = S.col4
    .     = .
    .     = .
    .     = .
[Table 1] T
    CROSS JOIN ( SELECT col2
            ,col3
            ,col4
            .
            .
         FROM [Table 1]
         WHERE id = 2
        ) S
WHERE id = 1

以同样的方式用新创建的行更新行id 2的所有列。在此删除新创建的行之后。

答案 1 :(得分:0)

我会在表1中创建一个带有新ID的临时条目,将表2中的引用从table1_id=1移动到新ID,将table1_id=2移动到table_1_id=1然后移动临时参考table1_id=2

答案 2 :(得分:0)

向table1添加一个虚拟行。

更新表格2:update table2 set table1-id = dummyid where table1-id = 1

然后:update table2 set table1-id = 1 where table1-id = 2

最后:update table2 set table1-id = 2 where table1-id = dummyid

您也可以使用此逻辑更改table1。