Saya memindahkan catatan dari satu database ke yang lain, sebagai bagian dari proses pengarsipan. Saya ingin menyalin baris ke tabel tujuan dan kemudian menghapus baris yang sama dari tabel sumber.
Pertanyaan saya adalah, apa cara paling efisien untuk melakukan pemeriksaan jika insert pertama berhasil sebelum menghapus baris.
Gagasan saya adalah ini, tetapi saya merasa ada cara yang lebih baik:
@num_records=select count(ID) from Source_Table where (criteria for eligible rows)
insert * into Destination_Table where (criteria for eligible rows)
if ((select count(ID) from Destination_Table where (criteria) )=@numrecords)
delete * from Source_Table where (criteria)
Apakah lebih baik / mungkin untuk menggabungkannya dengan fungsi RAISERROR? Terima kasih!
sumber
OUTPUT
klausa? Itu bukan karena itu semua adalah satu pernyataan. Juga hindari masalah keharusan membaca baris dua kali (dan mungkin kehilangan baris yang ditambahkan antara baca untuk sisipan dan baca untuk penghapusan)Cara saya berpikir tentang melakukan pengarsipan (yang saya yakin juga tidak sempurna), adalah menambahkan kolom sedikit ke tabel arsip baru seperti 'Diarsipkan' yang akan memiliki nilai 1 setelah transfer rekaman berhasil. Dan setelah Anda mentransfer semua catatan, Anda dapat melakukan operasi penghapusan sambil juga mencari nilai bidang 'Diarsipkan' dari '1' yaitu Benar dari tabel yang diarsipkan.
Dan saya setuju dengan Mike untuk menggunakan Try / Catch.
sumber
Coba ini:
sumber