Database saya berisi tiga tabel yang disebut Object_Table
, Data_Table
dan Link_Table
. Tabel tautan hanya berisi dua kolom, identitas catatan objek dan identitas catatan data.
Saya ingin menyalin data dari DATA_TABLE
mana itu terkait dengan satu identitas objek yang diberikan dan menyisipkan catatan yang sesuai ke Data_Table
dan Link_Table
untuk identitas objek tertentu yang diberikan.
Saya bisa melakukan ini dengan memilih ke dalam variabel tabel dan perulangan melalui melakukan dua menyisipkan untuk setiap iterasi.
Apakah ini cara terbaik untuk melakukannya?
Sunting : Saya ingin menghindari loop karena dua alasan, yang pertama adalah saya malas dan loop / temp table membutuhkan lebih banyak kode, lebih banyak kode berarti lebih banyak tempat untuk membuat kesalahan dan alasan kedua adalah kekhawatiran tentang kinerja.
Saya bisa menyalin semua data dalam satu sisipan tetapi bagaimana cara mendapatkan tabel tautan untuk menautkan ke catatan data baru di mana setiap catatan memiliki id baru?
sumber
Jawaban:
Dalam satu pernyataan : Tidak.
Dalam satu transaksi : Ya
Kabar baiknya adalah bahwa kode di atas juga dijamin atom , dan dapat dikirim ke server dari aplikasi klien dengan satu string sql dalam panggilan fungsi tunggal seolah-olah itu adalah satu pernyataan. Anda juga bisa menerapkan pemicu ke satu tabel untuk mendapatkan efek dari satu sisipan. Namun, pada akhirnya ini masih dua pernyataan dan Anda mungkin tidak ingin menjalankan pelatuk untuk setiap sisipan.
sumber
insert into ... select ...
pernyataan. Bagaimana kode di atas membaca atau mengulangi data Object_Table. Anda masih perlu menggunakan variabel tabel yang tidak ingin dilakukan oleh penanya.Anda masih membutuhkan dua
INSERT
pernyataan, tetapi sepertinya Anda ingin mendapatkanIDENTITY
dari sisipan pertama dan menggunakannya di yang kedua, dalam hal ini, Anda mungkin ingin melihat ke dalamOUTPUT
atauOUTPUT INTO
: http://msdn.microsoft.com/en- us / library / ms177564.aspxsumber
Berikut ini mengatur situasi yang saya miliki, menggunakan variabel tabel.
Berkat jawaban lain yang mengarahkan saya ke klausa OUTPUT saya bisa menunjukkan solusinya:
Namun ternyata itu tidak sesederhana itu dalam kehidupan nyata karena kesalahan berikut
Saya masih bisa
OUTPUT INTO
tabel temp dan kemudian selesai dengan memasukkan normal. Jadi saya bisa menghindari loop saya tetapi saya tidak bisa menghindari tabel temp.sumber
Kedengarannya seperti tabel Tautan menangkap banyak: banyak hubungan antara tabel Objek dan tabel Data.
Saran saya adalah menggunakan prosedur tersimpan untuk mengelola transaksi. Saat Anda ingin menyisipkan ke objek atau tabel Data melakukan sisipan Anda, dapatkan ID baru dan masukkan ke tabel Link.
Ini memungkinkan semua logika Anda untuk tetap dienkapsulasi dalam satu sproc yang mudah dipanggil.
sumber
Jika Anda ingin tindakan lebih atau kurang atom, saya akan pastikan untuk membungkusnya dalam suatu transaksi. Dengan begitu Anda dapat memastikan keduanya terjadi atau keduanya tidak terjadi sesuai kebutuhan.
sumber
Anda dapat membuat Tampilan dengan memilih nama kolom yang diperlukan oleh pernyataan penyisipan Anda, menambahkan BUKAN PEMASANG INSERT, dan masukkan ke dalam tampilan ini.
sumber
Saya ingin menekankan pada penggunaan
untuk transaksi MSSQL dengan beberapa pernyataan sql.
Lihat: https://msdn.microsoft.com/en-us/library/ms188792.aspx Mereka memberikan contoh yang sangat baik.
Jadi, kode final akan terlihat seperti berikut:
sumber
Sisipan hanya dapat beroperasi pada satu tabel pada satu waktu. Banyak Sisipan harus memiliki banyak pernyataan.
Saya tidak tahu bahwa Anda perlu melakukan perulangan melalui variabel tabel - tidak bisakah Anda menggunakan sisipan massa ke dalam satu tabel, lalu masukkan massa ke yang lainnya?
By the way - Saya kira maksud Anda menyalin data dari Object_Table; kalau tidak, pertanyaannya tidak masuk akal.
sumber
Sebelum dapat melakukan penyisipan multitable di Oracle, Anda bisa menggunakan trik yang melibatkan penyisipan ke tampilan yang memiliki BUKAN pemicu BUKAN didefinisikan untuk melakukan sisipan. Bisakah ini dilakukan dalam SQL Server?
sumber
sumber
// jika Anda ingin memasukkan yang sama dengan tabel pertama
// atau jika Anda ingin memasukkan bagian tabel tertentu
// aku tahu itu kelihatannya terlalu bagus untuk menjadi benar, tapi itu berhasil dan kamu dapat terus menambahkan kueri hanya mengubah
Saya memiliki 17 tabel yang berfungsi.
sumber