Daten in die Eltern-Kind-Tabelle einfügen
Das Ziel dieses Beispiels besteht darin, Daten aus einem eingehenden UDT (@tEmployeeData) in mehrere Tabellen einzufügen und so eine korrekte Zuordnung zwischen übergeordneten und untergeordneten Datensätzen sicherzustellen.
Mapping-Probleme lösen
Um die notwendige Zuordnung herzustellen, fügen wir dem UDT eine temporäre EmployeeId-Spalte hinzu und füllen sie mit kontinuierlichen Werten. Zusätzlich erstellen wir eine Tabellenvariable (@EmployeeidMap), um die temporäre Mitarbeiter-ID im UDT der tatsächlich in der Zieltabelle generierten Mitarbeiter-ID zuzuordnen.
Füllen Sie die Haupttabelle aus
Wir verwenden MERGE, um die @MainEmployee-Tabelle mit Werten aus den eingefügten Daten und Quelldaten zu füllen. Dadurch können wir den generierten EmployeeID-Wert erfassen und gleichzeitig die Zuordnungstabelle füllen.
<code class="language-sql">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 (temp_id, id);</code>
Zuordnen und in Eltern-Kind-Tabellen einfügen
Wir verbinden dann @tEmployeeData mit @EmployeeidMap, um die tatsächliche Mitarbeiter-ID zu erhalten, die wir zum Füllen der @ParentEmployeeDepartment-Tabelle verwenden. In ähnlicher Weise verbinden wir @ParentEmployeeDepartment mit @tEmployeeData, um die Eltern-ID den untergeordneten Daten zuzuordnen und die Daten in @ChildEmployeeDepartmentTypeA und @ChildEmployeeDepartmentTypeB einzufügen.
Testeinlage
Um zu überprüfen, ob das Mapping erfolgreich war, führen wir eine Abfrage aus, die die UDT-Daten mit den Mapping- und Zieltabellen verknüpft.
<code class="language-sql">SELECT FirstName, LastName, SentData.DepartmentType As [部门类型], DepartmentBuilding As 建筑物, DepartmentEmployeeLevel As [员工级别], DepartmentTypeAMetadata As [A 元数据], DepartmentTypeBMetadata As [B 元数据], SentData.EmployeeId As 临时ID, EmpMap.id As [员工ID], DeptMap.ParentEmployeeDepartmentID As [部门ID] FROM @tEmployeeData SentData INNER JOIN @EmployeeidMap EmpMap ON SentData.EmployeeId = temp_id INNER JOIN @ParentEmployeeDepartment DeptMap ON EmpMap.id = DeptMap.EmployeeID</code>
Dieser Ansatz stellt sicher, dass untergeordnete Daten korrekt dem jeweiligen übergeordneten Datensatz zugeordnet werden, und optimiert gleichzeitig die Leistung, indem unnötige zeilenweise Vorgänge vermieden werden.
Das obige ist der detaillierte Inhalt vonWie fügt man Daten mit korrekter Zuordnung effizient in übergeordnete und untergeordnete Tabellen ein?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!