高效插入複雜資料結構中父子表資料的預存程序
問題:
在複雜的資料庫結構中,如何使用預存程序有效率地將資料插入父子表中,同時確保資料映射正確並最佳化效能?
解:
為了有效率地將資料插入父子表,請遵循以下步驟:
建立臨時ID列: 在使用者自訂表 (UDT) 中新增一個 EmployeeId
列,用於保存每位員工的臨時ID。
使用臨時ID填充UDT: 將資料插入UDT,包括臨時ID。
建立EmployeeID映射表: 宣告一個表格變數 (@EmployeeidMap
) 來對應從員工表插入的值到UDT中的臨時員工ID。
使用MERGE語句插入員工表: 使用 MERGE
語句將資料插入 @MainEmployee
表,並將來源資料員工ID和插入的員工ID輸出到映射表中。
插入ParentEmployeeDepartment表: 將UDT與映射表連接,取得實際的員工ID,並將資料插入 @ParentEmployeeDepartment
表。
對應到ParentEmployeeDepartmentID: 使用 @ParentEmployeeDepartment
中的數據,將 ParentEmployeeDepartmentID
中的實際值對應到預存程序發送的資料。
插入子表: 使用 Parent
表中的 EmployeeID
和 DepartmentType
來決定要將資料插入哪個子表。
代碼:
<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>
輸出:
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 |
注意:
此解決方案使用映射表來有效匹配表之間的不同資料。它避免了逐行操作,並優化了效能,使其適用於大型資料集。
以上是如何使用預存程序有效率地將資料插入複雜資料結構的父表和子表中,確保正確的資料映射和最佳效能?的詳細內容。更多資訊請關注PHP中文網其他相關文章!