2016-03-24 8 views
0

Lassen Sie uns also sagen, ich habe eine Tabelle wieWie kann ich die IDs zweier Zeilen, die Referenzen in anderen Tabellen sind, sicher austauschen?

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

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

wo table1_id in Table 2 Referenzen id in Table 1.

Ich möchte die id s der Zeilen mit id=1 und id=2.

Kann ich dies tun, ohne die Beziehungen zu schaden?

+0

Floppt die fk (table1_id) eine Option, weil das einfacher ist – Paparazzi

Antwort

3

Fügen Sie einen Dummy-Eintrag mit Kopie der ID 1 Zeile in [Tabelle 1] mit neuer ID ein. Aktualisieren Sie dann alle Spalten id 1 mit der ID 2 mit Abfrage nach

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 

In derselben Art und Weise Aktualisierung alle Spalten von Zeile id 2 mit neu angelegten Reihe. Danach löschen Sie die neu erstellte Zeile.

0

würde ich einen temporären Eintrag mit einer neuen ID in Tabelle 1, bewegen Sie die Referenzen in Tabelle 2 von table1_id=1 an die neue ID erstellen, table1_id=2-table_1_id=1 bewegen und dann die temporären referencves zu table1_id=2 bewegen.

0

Fügen Sie eine Dummy-Zeile zu Tabelle1 hinzu.

Aktualisierungstabelle2: update table2 set table1-id = dummyid where table1-id = 1.

Dann: update table2 set table1-id = 1 where table1-id = 2.

Zuletzt: update table2 set table1-id = 2 where table1-id = dummyid.

Sie können diese Logik verwenden, um auch table1 zu ändern.

Verwandte Themen