> 데이터 베이스 > MySQL 튜토리얼 > 저장 프로시저에서 사용자 정의 테이블 유형을 사용하여 부모 및 자식 테이블에 데이터를 효율적으로 삽입하는 방법은 무엇입니까?

저장 프로시저에서 사용자 정의 테이블 유형을 사용하여 부모 및 자식 테이블에 데이터를 효율적으로 삽입하는 방법은 무엇입니까?

Susan Sarandon
풀어 주다: 2025-01-14 19:21:46
원래의
802명이 탐색했습니다.

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

저장 프로시저 내에서 상위 및 하위 테이블을 효율적으로 채우기

이 문서에서는 데이터 입력을 위해 사용자 정의 테이블 유형(UDT)을 활용하여 저장 프로시저 내의 상위 및 하위 테이블에 데이터를 효율적으로 삽입하기 위한 솔루션을 간략하게 설명합니다. 이 접근 방식은 데이터 무결성을 유지하고 행별 작업과 관련된 성능 병목 현상을 방지하는 문제를 해결합니다.

과제: 데이터 무결성 및 성능

문제는 UDT의 데이터를 저장 프로시저 내 여러 관련 테이블(상위 테이블 및 관련 하위 테이블)에 정확하게 매핑하는 것입니다. 단순한 행 단위 삽입은 특히 대규모 데이터 세트를 처리할 때 비효율적이며 오류가 발생하기 쉽습니다.

해결책: 다단계 접근 방식

이 솔루션은 효율성과 데이터 무결성을 모두 보장하기 위해 다단계 프로세스를 사용합니다.

  1. UDT 확장: UDT에 임시 ID 열(temp_id)을 추가합니다. 이는 UDT 내의 각 행에 대한 고유 식별자 역할을 하며 삽입 프로세스 전반에 걸쳐 데이터를 추적하는 데 중요합니다.

  2. 상위 테이블 삽입을 위해 MERGE 사용: MERGE 문은 상위 테이블(@MainEmployee)에 데이터를 효율적으로 삽입합니다. 중요한 점은 OUTPUT 절이 임시 ID(UDT의 temp_id)와 상위 테이블에서 새로 생성된 EmployeeID를 모두 캡처한다는 것입니다.

  3. 매핑 테이블 생성: OUTPUT 문의 MERGE 데이터는 임시 매핑 테이블(@EmployeeidMap)을 채웁니다. 이 테이블은 임시 temp_id를 상위 테이블에서 생성된 실제 EmployeeID에 연결합니다.

  4. ID 매핑을 통한 상위 테이블 채우기: 그런 다음 @EmployeeidMap 테이블을 사용하여 UDT 데이터를 상위 테이블(@ParentEmployeeDepartment)과 조인하여 각 상위에 올바른 EmployeeID이 할당되도록 합니다. 기록합니다.

  5. 하위 테이블 채우기: 마지막으로 @ChildEmployeeDepartmentTypeA@ChildEmployeeDepartmentTypeB 테이블 모두와의 조인을 사용하여 하위 테이블(@EmployeeidMap, @ParentEmployeeDepartment)을 채웁니다. 이는 상위 및 하위 기록 간에 필요한 관계를 설정합니다.

예시 코드 예:

다음 코드는 이러한 향상된 접근 방식을 보여줍니다.

<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>
로그인 후 복사

이 세련된 전략은 효율적이고 정확한 데이터 삽입을 보장하여 상위 테이블과 하위 테이블 간의 참조 무결성을 유지하면서 잠재적으로 큰 데이터 세트를 효과적으로 처리합니다.

위 내용은 저장 프로시저에서 사용자 정의 테이블 유형을 사용하여 부모 및 자식 테이블에 데이터를 효율적으로 삽입하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿