Sql 如何安全地交换其他表中引用的两行的ID?
假设我有一张像这样的桌子Sql 如何安全地交换其他表中引用的两行的ID?,sql,sql-server,tsql,Sql,Sql Server,Tsql,假设我有一张像这样的桌子 Table 1 ============= id | ... ============= 1 | ... 2 | ... 3 | ... . . . . . . Table 2 ======================= id | table1_id | ... ======================= 1 | 1 | ... 2 | 1 | ... 3
Table 1
=============
id | ...
=============
1 | ...
2 | ...
3 | ...
. .
. .
. .
Table 2
=======================
id | table1_id | ...
=======================
1 | 1 | ...
2 | 1 | ...
3 | 2 | ...
. . .
. . .
. . .
其中表2中的表1\u id
引用了表1中的id
我想在id=1
和id=2
的行中添加id
s
我可以在不破坏关系的情况下这样做吗?我会在表1中创建一个带有新id的临时条目,将表2中的引用从表1_id=1
移动到新id,将表1\u id=2
移动到表1\u id=1
,然后将临时引用移动到表1\u id=2
,我将在表1中创建一个带有新id的临时条目,将表2中的引用从表1\u id=1
移动到新id,将表1\u id=2
移动到表1\u id=1
,然后将临时引用移动到表1\u id=2
向表1添加一个虚拟行
更新表2:更新表2设置表1 id=dummyid,其中表1 id=1
然后:更新table2设置table1 id=1,其中table1 id=2
最后:更新table2设置table1 id=2,其中table1 id=dummyid
您也可以使用此逻辑更改表1。向表1添加一个虚拟行
更新表2:更新表2设置表1 id=dummyid,其中表1 id=1
然后:更新table2设置table1 id=1,其中table1 id=2
最后:更新table2设置table1 id=2,其中table1 id=dummyid
您也可以使用此逻辑更改表1。使用新id在[表1]中插入id为1行副本的伪条目。然后使用以下查询更新id为2的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的所有列。在此之后,删除新创建的行。在具有新id的[表1]中插入一个具有id 1行副本的伪条目。然后使用以下查询将id 1的所有列更新为id 2
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的所有列。在此之后,删除新创建的行。是否因为更容易而将fk(表1\u id)作为一个选项?是否因为更容易而将fk(表1\u id)作为一个选项