Eine gespeicherte Prozedur zum effizienten Einfügen von Eltern-Kind-Tabellendaten in komplexe Datenstrukturen
Frage:
Wie können in einer komplexen Datenbankstruktur gespeicherte Prozeduren verwendet werden, um Daten effizient in Eltern-Kind-Tabellen einzufügen und gleichzeitig eine korrekte Datenzuordnung sicherzustellen und die Leistung zu optimieren?
Lösung:
Um Daten effizient in Eltern-Kind-Tabellen einzufügen, befolgen Sie diese Schritte:
Erstellen Sie eine temporäre ID-Spalte: Fügen Sie eine EmployeeId
-Spalte in der benutzerdefinierten Tabelle (UDT) hinzu, um die temporäre ID jedes Mitarbeiters zu speichern.
UDT mit temporärer ID füllen: Daten in UDT einfügen, einschließlich temporärer ID.
Mitarbeiter-ID-Zuordnungstabelle erstellen: Deklarieren Sie eine Tabellenvariable (@EmployeeidMap
), um den aus der Mitarbeitertabelle eingefügten Wert der temporären Mitarbeiter-ID im UDT zuzuordnen.
Verwenden Sie die MERGE-Anweisung, um Daten in die Mitarbeitertabelle einzufügen: Verwenden Sie die MERGE
-Anweisung, um Daten in die @MainEmployee
-Tabelle einzufügen und die Quelldaten-Mitarbeiter-ID und die eingefügte Mitarbeiter-ID in die Zuordnung einzufügen Tisch.
Einfügen in die Tabelle „ParentEmployeeDepartment“: Verknüpfen Sie den UDT mit der Zuordnungstabelle, rufen Sie die tatsächliche Mitarbeiter-ID ab und fügen Sie die Daten in die Tabelle @ParentEmployeeDepartment
ein.
wird der ParentEmployeeDepartmentID zugeordnet: Ordnen Sie mithilfe der Daten in @ParentEmployeeDepartment
den tatsächlichen Wert in ParentEmployeeDepartmentID
den von der gespeicherten Prozedur gesendeten Daten zu.
In Untertabelle einfügen: Verwenden Sie Parent
und EmployeeID
aus der Tabelle DepartmentType
, um zu bestimmen, in welche Untertabelle Sie Daten einfügen möchten.
Code:
<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>
Ausgabe:
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 |
Hinweis:
Diese Lösung verwendet Zuordnungstabellen, um verschiedene Daten zwischen Tabellen effizient abzugleichen. Es vermeidet zeilenweise Vorgänge und optimiert die Leistung, sodass es für große Datenmengen geeignet ist.
Das obige ist der detaillierte Inhalt vonWie kann ich mithilfe einer gespeicherten Prozedur Daten effizient in übergeordnete und untergeordnete Tabellen in einer komplexen Datenstruktur einfügen und so eine ordnungsgemäße Datenzuordnung und optimale Leistung sicherstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!