Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Memasukkan Data dengan Cekap ke dalam Jadual Ibu Bapa dan Anak Menggunakan Jenis Jadual Ditentukan Pengguna dalam Prosedur Tersimpan?

Bagaimana untuk Memasukkan Data dengan Cekap ke dalam Jadual Ibu Bapa dan Anak Menggunakan Jenis Jadual Ditentukan Pengguna dalam Prosedur Tersimpan?

Susan Sarandon
Lepaskan: 2025-01-14 19:21:46
asal
851 orang telah melayarinya

How to Efficiently Insert Data into Parent and Child Tables Using a User-Defined Table Type in a Stored Procedure?

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:

  1. 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.

  2. Menggunakan MERGE untuk Sisipan Jadual Induk: Penyataan MERGE memasukkan data dengan cekap ke dalam jadual induk (@MainEmployee). Secara kritis, klausa OUTPUTnya menangkap kedua-dua ID sementara (temp_id daripada UDT) dan EmployeeID yang baru dijana daripada jadual induk.

  3. 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.

  4. 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.

  5. 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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan