Sisipkan ke dalam... Gabung... Pilih: Menggunakan MERGE untuk Mendapatkan Identiti Dijana
Dalam Pelayan SQL, INSERT... Pernyataan SELECT membenarkan pemasukan data ke dalam jadual sasaran daripada jadual atau pertanyaan lain. Walau bagaimanapun, ia mempunyai had apabila mengekstrak nilai daripada pelbagai sumber. Penyelesaian wujud dengan menggunakan pernyataan MERGE, yang membolehkan pengambilan kedua-dua data yang dimasukkan dan sumber.
Untuk menggambarkan, pertimbangkan situasi berikut:
PILIH nol, 110, Jadual1.ID, Jadual2.Lajur2
DARI Jadual1
JOIN Table1Table2Link on Table1.ID=Table1Table2Link.Column1 JOIN Table2 on Table1Table2Link.Column2=Table2.ID
Timbul keperluan untuk menangkap identiti yang dijana (Inserted.ID) daripada Jadual3 dan Jadual2. ID dan masukkannya ke dalam jadual atau pembolehubah sementara. Walaupun klausa OUTPUT biasanya digunakan untuk tujuan ini, ia tidak boleh mengekstrak data daripada jadual yang berbeza.
Penyelesaian terletak pada penggunaan MERGE untuk mengisi jadual dan bukannya INSERT...SELECT. Ini membenarkan akses kepada kedua-dua nilai yang disisipkan dan sumber dalam klausa output:
GABUNG KE DALAM Jadual3 MENGGUNAKAN<br>(</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">SELECT null as col2, 110 as col3, Table1.ID as col4, Table2.Column2 as col5, Table2.Id as col6 FROM Table1 JOIN Table1Table2Link on Table1.ID=Table1Table2Link.Column1 JOIN Table2 on Table1Table2Link.Column2=Table2.ID
) AS s ON 1 = 0 -- Sentiasa tidak dipadankan
APABILA TIDAK DIPADAKAN MAKA
INSERT (Lajur2, Column3, Column4, Column5)
VALUES (s.col2, s.col3, s.col4, s.col5)
OUTPUT Inserted.ID, s.col6
INTO @MyTableVar (insertedId, Table2Id);
Dengan menggunakan MERGE, klausa OUTPUT boleh mendapatkan kedua-dua identiti yang dimasukkan (Inserted.ID) dan nilai daripada Jadual2 (Table2.ID) dan memasukkannya ke dalam @MyTableVar untuk selanjutnya pemprosesan.
Atas ialah kandungan terperinci Bagaimanakah Pernyataan MERGE Boleh Mendapatkan Identiti Dijana dan Data Sumber dalam Operasi INSERT Pelayan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!