Mengisi Meja Ibu Bapa dan Anak dengan Cekap dalam Prosedur Tersimpan
Dokumen ini menggariskan penyelesaian untuk memasukkan data dengan cekap ke dalam jadual induk dan anak dalam prosedur tersimpan, memanfaatkan jenis jadual takrif pengguna (UDT) untuk input data. Pendekatan ini menangani cabaran untuk mengekalkan integriti data dan mengelakkan kesesakan prestasi yang dikaitkan dengan operasi baris demi baris.
Cabaran: Integriti dan Prestasi Data
Cabarannya terletak pada memetakan data secara tepat daripada UDT kepada berbilang jadual berkaitan (jadual induk dan jadual anak yang berkaitan) dalam prosedur yang disimpan. Sisipan baris demi baris yang mudah boleh menjadi tidak cekap dan terdedah kepada ralat, terutamanya apabila berurusan dengan set data yang besar.
Penyelesaian: Pendekatan Pelbagai Langkah
Penyelesaian ini menggunakan proses berbilang langkah untuk memastikan kecekapan dan integriti data:
Menambahkan UDT: Tambahkan lajur ID sementara (temp_id
) pada UDT. Ini berfungsi sebagai pengecam unik untuk setiap baris dalam UDT, penting untuk menjejak data merentas proses pemasukan.
Menggunakan MERGE
untuk Sisipan Jadual Induk: Penyataan MERGE
memasukkan data dengan cekap ke dalam jadual induk (@MainEmployee
). Secara kritis, klausa OUTPUT
nya menangkap kedua-dua ID sementara (temp_id
daripada UDT) dan EmployeeID
yang baru dijana daripada jadual induk.
Mencipta Jadual Pemetaan: Data OUTPUT
daripada pernyataan MERGE
mengisi jadual pemetaan sementara (@EmployeeidMap
). Jadual ini memautkan temp_id
sementara kepada EmployeeID
sebenar yang dijana dalam jadual induk.
Populasi Jadual Induk dengan Pemetaan ID: Jadual @EmployeeidMap
kemudiannya digunakan untuk menyertai data UDT dengan jadual induk (@ParentEmployeeDepartment
), memastikan EmployeeID
yang betul diberikan kepada setiap ibu bapa rekod.
Populasi Jadual Kanak-kanak: Akhirnya, jadual kanak-kanak (@ChildEmployeeDepartmentTypeA
, @ChildEmployeeDepartmentTypeB
) diisi menggunakan cantuman dengan kedua-dua jadual @EmployeeidMap
dan @ParentEmployeeDepartment
. Ini mewujudkan perhubungan yang diperlukan antara rekod ibu bapa dan anak.
Contoh Kod Ilustrasi:
Kod berikut menunjukkan pendekatan yang dipertingkatkan ini:
<code class="language-sql">CREATE TYPE dbo.tEmployeeData AS TABLE ( FirstName NVARCHAR(50), LastName NVARCHAR(50), DepartmentType NVARCHAR(10), DepartmentBuilding NVARCHAR(50), DepartmentEmployeeLevel NVARCHAR(10), DepartmentTypeAMetadata NVARCHAR(100), DepartmentTypeBMetadata NVARCHAR(100), temp_id INT IDENTITY(1,1) -- Added temporary ID column ) GO CREATE PROC dbo.EmployeeImport (@tEmployeeData dbo.tEmployeeData READONLY) AS BEGIN -- ... (Temporary table declarations remain the same as in the original example) ... -- MERGE into @MainEmployee table MERGE INTO @MainEmployee USING @tEmployeeData AS sourceData ON 1 = 0 WHEN NOT MATCHED THEN INSERT (FirstName, LastName) VALUES (sourceData.FirstName, sourceData.LastName) OUTPUT sourceData.temp_id, inserted.EmployeeID INTO @EmployeeidMap; -- ... (Remaining INSERT statements adjusted to use @EmployeeidMap for joining) ... END GO</code>
Strategi diperhalusi ini menjamin pemasukan data yang cekap dan tepat, memelihara integriti rujukan antara jadual induk dan anak sambil mengendalikan set data yang berpotensi besar dengan berkesan.
Atas ialah kandungan terperinci Bagaimana untuk Memasukkan Data dengan Cekap ke dalam Jadual Ibu Bapa dan Anak Menggunakan Jenis Jadual Ditentukan Pengguna dalam Prosedur Tersimpan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!