Prosedur tersimpan untuk memasukkan data jadual ibu bapa-anak dengan cekap ke dalam struktur data yang kompleks
Soalan:
Dalam struktur pangkalan data yang kompleks, bagaimana menggunakan prosedur tersimpan untuk memasukkan data dengan cekap ke dalam jadual induk-anak sambil memastikan pemetaan data yang betul dan mengoptimumkan prestasi?
Penyelesaian:
Untuk memasukkan data ke dalam jadual induk-anak dengan cekap, ikut langkah berikut:
Buat lajur ID sementara: Tambah lajur EmployeeId
dalam jadual takrif pengguna (UDT) untuk menyimpan ID sementara setiap pekerja.
Isi UDT dengan ID sementara: Masukkan data ke dalam UDT, termasuk ID sementara.
Buat jadual pemetaan EmployeeID: Isytihar pembolehubah jadual (@EmployeeidMap
) untuk memetakan nilai yang disisipkan daripada jadual pekerja kepada ID pekerja sementara dalam UDT.
Gunakan pernyataan MERGE untuk memasukkan ke dalam jadual pekerja: Gunakan pernyataan MERGE
untuk memasukkan data ke dalam jadual @MainEmployee
dan keluarkan data sumber ID pekerja dan memasukkan ID pekerja pada pemetaan meja.
Masukkan ke dalam jadual ParentEmployeeDepartment: Sertai UDT dengan jadual pemetaan, dapatkan ID pekerja sebenar dan masukkan data ke dalam jadual @ParentEmployeeDepartment
.
memetakan ke ParentEmployeeDepartmentID: Menggunakan data dalam @ParentEmployeeDepartment
, petakan nilai sebenar dalam ParentEmployeeDepartmentID
kepada data yang dihantar oleh prosedur tersimpan.
Sisipkan ke dalam subjadual: Gunakan Parent
dan EmployeeID
daripada jadual DepartmentType
untuk menentukan subjadual yang anda ingin masukkan data.
Kod:
<code class="language-sql">-- 创建EmployeeID映射表 DECLARE @EmployeeidMap TABLE (temp_id int, id int); -- 使用MERGE语句插入员工表 MERGE INTO @MainEmployee USING @tEmployeeData AS sourceData ON 1 = 0 WHEN NOT MATCHED THEN INSERT (FirstName, LastName) VALUES (sourceData.FirstName, sourceData.LastName) OUTPUT sourceData.EmployeeId, inserted.EmployeeID INTO @EmployeeidMap; -- 插入ParentEmployeeDepartment表 INSERT INTO @ParentEmployeeDepartment (EmployeeID, DepartmentType) SELECT Id, DepartmentType FROM @tEmployeeData INNER JOIN @EmployeeidMap ON EmployeeID = temp_id; -- 映射到ParentEmployeeDepartmentID SELECT FirstName, LastName, SentData.DepartmentType AS [Dept. Type], DepartmentBuilding AS Building, DepartmentEmployeeLevel AS [Emp. Level], DepartmentTypeAMetadata AS [A Meta], DepartmentTypeBMetadata AS [B Meta], SentData.EmployeeId AS TempId, EmpMap.id AS [Emp. Id], DeptMap.ParentEmployeeDepartmentID AS [Dept. Id] FROM @tEmployeeData SentData INNER JOIN @EmployeeidMap EmpMap ON SentData.EmployeeId = temp_id INNER JOIN @ParentEmployeeDepartment DeptMap ON EmpMap.id = DeptMap.EmployeeID;</code>
Output:
FirstName | LastName | Dept. Type | Building | Emp. Level | A Meta | B Meta | TempId | Emp. Id | Dept. Id |
---|---|---|---|---|---|---|---|---|---|
Dave_FN | Dave_LN | B | OpenC | XII | NULL | Lab | 8 | 1 | 1 |
Joe_FN | Joe_LN | A | 101 | IV | Tech/IT | NULL | 7 | 2 | 2 |
Mike_FN | Mike_LN | B | OpenH | XII | NULL | Med | 6 | 3 | 3 |
Tom_FN | Tom_LN | A | 101 | IV | Tech/IT | NULL | 5 | 4 | 4 |
Nota:
Penyelesaian ini menggunakan jadual pemetaan untuk memadankan data berbeza antara jadual dengan cekap. Ia mengelakkan operasi baris demi baris dan mengoptimumkan prestasi, menjadikannya sesuai untuk set data yang besar.
Atas ialah kandungan terperinci Bagaimanakah saya boleh memasukkan data dengan cekap ke dalam jadual induk dan anak dalam struktur data yang kompleks menggunakan prosedur tersimpan, memastikan pemetaan data yang betul dan prestasi optimum?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!