saya memiliki proses untuk memindahkan baris dari satu database ke database lainnya. Karena beberapa rantai referensi kunci asing melingkar saya tidak dapat menghapus baris dari database lama, juga tidak dapat memasukkannya ke dalam database baru.
Karena seluruh operasi terjadi dalam transaksi1, saya ingin SQL Server mengabaikan kegagalan integritas referensial hingga saya memanggil COMMIT TRANSACTION
.
Misalnya2:
Table: Turboencabulators Table: Marselvanes
========================= =======================
PK TurboencabulatorID int /-> PK MarselvaneID int
^ MarselvanesID int --/ HasGrammeter bit
| PantametricFan varchar(50)
+------------------------------- TurboencabulatorID int
Jika saya mencoba memasukkan turboencabulator ke dalam tabel baru, ia akan gagal tanpa marselvane sudah ada di sana. Membalikkan urutan memiliki masalah yang sama.
Saat mencoba menghapus baris lama, saya tidak dapat menghapus satu baris sampai baris lainnya dihapus.
Saya telah mencoba melakukan sistem fase n, di mana semua baris disisipkan dengan kolom apa pun yang berada di bawah batasan kunci asing yang disetel ke null. Kemudian saya memperbarui semua baris yang disisipkan, menempatkan nilai yang hilang. Lalu, untuk menghapus baris sumber, saya menghapus semua kolom yang terpengaruh oleh FK, lalu menghapus baris sebenarnya.3
Apa yang sebenarnya saya sukai adalah melakukan operasi T-SQL saya, dan meminta SQL Server tidak memberi tahu saya sampai saya mencoba memanggil komit.
Catatan
1didistribusikan
2dibuat hipotetis
3yang tidak saya lakukan lagi