Insérer les données dans la table parent-enfant
L'objectif de cet exemple est d'insérer les données d'un UDT entrant (@tEmployeeData) dans plusieurs tables, garantissant ainsi un mappage correct entre les enregistrements parent et enfant.
Résoudre les problèmes de cartographie
Pour établir le mappage nécessaire, nous ajoutons une colonne temporaire employeId à l'UDT et la remplissons de valeurs continues. De plus, nous créons une variable de table (@EmployeeidMap) pour mapper l'ID d'employé temporaire dans l'UDT avec l'ID d'employé réel généré dans la table cible.
Remplir la table principale
Nous utilisons MERGE pour remplir la table @MainEmployee avec les valeurs des données insérées et des données sources. Cela nous permet de capturer la valeur EmployeeID générée et de remplir la table de mappage en même temps.
<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>
Mapper et insérer dans les tables parent-enfant
Nous rejoignons ensuite @tEmployeeData avec @EmployeeidMap pour obtenir l'identifiant réel de l'employé, que nous utilisons pour remplir la table @ParentEmployeeDepartment. De même, nous connectons @ParentEmployeeDepartment avec @tEmployeeData pour mapper l'ID parent aux données enfants et insérons les données dans @ChildEmployeeDepartmentTypeA et @ChildEmployeeDepartmentTypeB.
Insert de test
Pour vérifier que le mappage a réussi, nous exécutons une requête qui joint les données UDT au mappage et aux tables cibles.
<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>
Cette approche garantit que les données enfants sont correctement mappées à leur enregistrement parent respectif, tout en optimisant les performances en évitant les opérations ligne par ligne inutiles.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!